关于@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 相关文章推荐
JVM入门之类加载与字节码技术(类加载与类的加载器)
Jun 15 Java/Android
基于Java的MathML转图片的方法(示例代码)
Jun 23 Java/Android
如何解决springcloud feign 首次调用100%失败的问题
Jun 23 Java/Android
Java Dubbo框架知识点梳理
Jun 26 Java/Android
总结Java对象被序列化的两种方法
Jun 30 Java/Android
JAVA API 实用类 String详解
Oct 05 Java/Android
Java实现房屋出租系统详解
Oct 05 Java/Android
Android自定义ScrollView实现阻尼回弹
Apr 01 Java/Android
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
Apr 13 Java/Android
Java 多态分析
Apr 26 Java/Android
springboot集成redis存对象乱码的问题及解决
Jun 16 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数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
php对二维数组进行排序的简单实例
2013/12/19 PHP
PHP中addslashes与mysql_escape_string的区别分析
2016/04/25 PHP
php中二分法查找算法实例分析
2016/09/22 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
2017/02/18 PHP
php的优点总结 php有哪些优点
2019/07/19 PHP
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
2015/11/24 Javascript
深入剖析JavaScript面向对象编程
2016/07/12 Javascript
node.js学习之base64编码解码
2016/10/21 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
使用jQuery操作DOM的方法小结
2017/02/27 Javascript
vue如何从接口请求数据
2017/06/22 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
详解a++和++a的区别
2017/08/30 Javascript
React-Router如何进行页面权限管理的方法
2017/12/06 Javascript
Angular2 父子组件通信方式的示例
2018/01/29 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
JavaScript设计模式之享元模式实例详解
2019/01/17 Javascript
微信小程序整合使用富文本编辑器的方法详解
2019/04/25 Javascript
js+h5 canvas实现图片验证码
2020/10/11 Javascript
[45:15]Optic vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
Python对文件操作知识汇总
2016/05/15 Python
python自动12306抢票软件实现代码
2018/02/24 Python
Python3.5 创建文件的简单实例
2018/04/26 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
2019/01/30 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
2020/01/18 Python
使用django自带的user做外键的方法
2020/11/30 Python
浅谈three.js中的needsUpdate的应用
2012/11/12 HTML / CSS
享受加州生活方式的时尚舒适:XCVI
2018/07/09 全球购物
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
公务员培训自我鉴定
2013/09/19 职场文书
应届毕业生个人求职自荐信
2014/01/06 职场文书
护理专业毕业生自荐信
2014/06/15 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
总结高并发下Nginx性能如何优化
2021/11/01 Servers
vue中data里面的数据相互使用方式
2022/06/05 Vue.js