关于@OnetoMany关系映射的排序问题,使用注解@OrderBy


Posted in Java/Android onDecember 06, 2021

Spring里面一对多的关系可以用@OnetoMany注解来实现

然后在实际使用中,如果要对从属对象按条件排序该怎么处理呢?可以用注解来实现的也就是@OrderBy

来看看我的这个例子

一个Product对象,里面有个OnetoMany关系对应到多张图片,然后我这个图片在后台要支持排序,所以我就在Picture这个类里面加了一个ordernum的int型字段来进行排序标记

@OneToMany(cascade = CascadeType.ALL,mappedBy = "product",fetch = FetchType.EAGER)
private List<Picture> pictures;

然后我在取值的时候怎样才能让图片按照我的要求来进行排序呢

就是使用@OrderBy

看一下具体是怎么使用

@Target({METHOD, FIELD})
@Retention(RUNTIME)
public @interface OrderBy { 
   /**
    * An <code>orderby_list</code>.  Specified as follows:
    *
    * <pre>
    *    orderby_list::= orderby_item [,orderby_item]*
    *    orderby_item::= [property_or_field_name] [ASC | DESC]
    * </pre>
    *
    * <p> If <code>ASC</code> or <code>DESC</code> is not specified,
    * <code>ASC</code> (ascending order) is assumed.
    *
    * <p> If the ordering element is not specified, ordering by
    * the primary key of the associated entity is assumed.
    */
    String value() default "";
}

通过这个注解的定义可以看出它的参数就是一个String

比如我项目里按照图片的ordernum升序排列就是@OrderBy("ordernum ASC");ordernum是字段名 ASC对应排序方式,中间用空格隔开

当然也支持多个条件进行排序,比如我要通过ordernum和id进行,那就是@OrderBy("ordernum ASC,id ASC")

最后我的代码

@OneToMany(cascade = CascadeType.ALL,mappedBy = "product",fetch = FetchType.EAGER)
@OrderBy("ordernum ASC")
private List<Picture> pictures;

Entity One-to-Many 排序设置

/**
 * 评论实体类,对应 TCOMMENT 表。
 * @author William
 */
@Entity
@Table(name = "TCOMMENT")
public class Comment {
 
 /**
  * 标识ID字段为主键,主键生成策略为:自动。
  */
 @Id @GeneratedValue
 private Long id;
 private String nickname;
 private String content;
 private Integer note;
 /**
  * 发表日期,对应 posted_date 字段,字段类型为TIMESTAMP。
  */
 @Column(name = "posted_date")
 @Temporal(TemporalType.TIMESTAMP)
 private Date postedDate;
 
 // Constructors, setters, getters
}
/**
 * 新闻实体类,对应 News表。
 * @author William
 */
@Entity
@NamedQuery(name = "findAllNews", query = "SELECT n FROM News n")
public class News {
 
 /**
  * 标识ID字段为主键,主键生成策略为:自动。
  */
 @Id @GeneratedValue
 private Long id;
 /**
  * content新闻内容,该字段必填。
  */
 @Column(nullable = false)
 private String content;
 /**
  * comments评论,与之进行一对多关联。<br/>
  * FetchType.EAGER 获取新闻时立即相关评论。<br/>
  * CascadeType.ALL 支持所有级联操作。<br/>
  * OrderBy 获取评论列表时,按照postedDate(发表日期)降序排列。
  */
 @OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
 @JoinTable(name = "NEWS_COMMENT", joinColumns = @JoinColumn(name = "NEWS_ID"),
  inverseJoinColumns = @JoinColumn(name = "COMMENT_ID"))
 @OrderBy("postedDate DESC")
 private List<Comment> comments; 
 // Constructors, setters, getters
}
CREATE TABLE TCOMMENT (
 ID BIGINT,
 NICKNAME VARCHAR(50),
 CONTENT VARCHAR(500),
 NOTE INT,
 POSTED_DATE TIMESTAMP,
 PRIMARY KEY (ID)
);
 
CREATE TABLE NEWS (
 ID BIGINT,
 CONTENT VARCHAR(500),
 PRIMARY KEY (ID)
);
 
CREATE TABLE NEWS_COMMENT (
 NEWS_ID BIGINT,
 COMMENT_ID BIGINT,
 PRIMARY KEY (NEWS_ID, COMMENT_ID),
 FOREIGN KEY (NEWS_ID) REFERENCES NEWS(ID),
 FOREIGN KEY (COMMENT_ID) REFERENCES TCOMMENT(ID)
);

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Java/Android 相关文章推荐
浅谈Java实现分布式事务的三种方案
Jun 11 Java/Android
SpringBoot生成License的实现示例
Jun 16 Java/Android
Java日常练习题,每天进步一点点(38)
Jul 26 Java/Android
Java 实战项目之家居购物商城系统详解流程
Nov 11 Java/Android
Eclipse+Java+Swing+Mysql实现电影购票系统(详细代码)
Jan 18 Java/Android
使用HttpSessionListener监听器实战
Mar 17 Java/Android
Spring Boot 底层原理基础深度解析
Apr 03 Java/Android
Java中API的使用方法详情
Apr 06 Java/Android
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
Apr 24 Java/Android
Spring Boot项目如何优雅实现Excel导入与导出功能
Jun 10 Java/Android
Java异常体系非正常停止和分类
Jun 14 Java/Android
详解Flutter自定义应用程序内键盘的实现方法
Jun 14 Java/Android
SpringBoot整合阿里云视频点播的过程详解
Dec 06 #Java/Android
SpringDataJPA在Entity中常用的注解介绍
Dec 06 #Java/Android
Java中try catch处理异常示例
Dec 06 #Java/Android
SpringDataJPA实体类关系映射配置方式
Dec 06 #Java/Android
Java异常处理try catch的基本用法
Dec 06 #Java/Android
Mybatis是这样防止sql注入的
Dec 06 #Java/Android
Java tomcat手动配置servlet详解
Nov 27 #Java/Android
You might like
在PHP中PDO解决中文乱码问题的一些补充
2010/09/06 PHP
PHP分页详细讲解(有实例)
2013/10/30 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
javascript中的一些注意事项 更新中
2010/12/06 Javascript
js对象之JS入门之Array对象操作小结
2011/01/09 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
javascript删除数组元素并且数组长度减小的简单实例
2014/02/14 Javascript
如何正确使用javascript 来进行我们的程序开发
2014/06/23 Javascript
判断window.onload是否多次使用的方法
2014/09/21 Javascript
文本框只能输入数字的js代码(含小数点)
2016/07/10 Javascript
javascript 中的console.log和弹出窗口alert
2016/08/30 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
2016/09/20 Javascript
HTML中使背景图片自适应浏览器大小实例详解
2017/04/06 Javascript
微信小程序商城项目之淘宝分类入口(2)
2017/04/17 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
使用vue2实现带地区编号和名称的省市县三级联动效果
2018/11/05 Javascript
微信小程序之onLaunch与onload异步问题详解
2019/03/28 Javascript
详解如何提升JSON.stringify()的性能
2019/06/12 Javascript
[02:43]2018DOTA2亚洲邀请赛主赛事首日TOP5
2018/04/04 DOTA
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
Python中生成Epoch的方法
2017/04/26 Python
Python中max函数用于二维列表的实例
2018/04/03 Python
对Python3之进程池与回调函数的实例详解
2019/01/22 Python
python3+selenium自动化测试框架详解
2019/03/17 Python
python简单鼠标自动点击某区域的实例
2019/06/25 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
5 分钟读懂Python 中的 Hook 钩子函数
2020/12/09 Python
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
Mansur Gavriel官网:纽约市的一个设计品牌
2019/05/02 全球购物
高分子材料个人求职信范文
2013/09/25 职场文书
应届毕业生就业自荐信
2013/10/26 职场文书
毕业生简历自我评价范文
2014/04/09 职场文书
学雷锋活动总结范文
2014/04/25 职场文书
优秀班组事迹材料
2014/12/24 职场文书
Python turtle实现贪吃蛇游戏
2021/06/18 Python
apache ftpserver搭建ftp服务器
2022/05/20 Servers