关于@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 Nio使用NioSocket客户端与服务端交互实现方式
Jun 15 Java/Android
Netty结合Protobuf进行编解码的方法
Jun 26 Java/Android
Sleuth+logback 设置traceid 及自定义信息方式
Jul 26 Java/Android
idea 在springboot中使用lombok插件的方法
Aug 02 Java/Android
maven依赖的version声明控制方式
Jan 18 Java/Android
Java如何实现通过键盘输入一个数组
Feb 15 Java/Android
Netty分布式客户端处理接入事件handle源码解析
Mar 25 Java/Android
Java完整实现记事本代码
Jun 16 Java/Android
springboot实现string转json json里面带数组
Jun 16 Java/Android
Java实现HTML转为Word的示例代码
Jun 28 Java/Android
Java 中的 Lambda List 转 Map 的多种方法详解
Jul 07 Java/Android
前端与RabbitMQ实时消息推送未读消息小红点实现示例
Jul 23 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验证码类代码分享(已封装成类)
2011/07/17 PHP
javascript 嵌套的函数(作用域链)
2010/03/15 Javascript
javascript对select标签的控制(option选项/select)
2013/01/31 Javascript
JavaScript中的关键字&quot;VAR&quot;使用详解 分享
2013/07/31 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
2014/02/07 Javascript
javascript中Number对象的toString()方法分析
2014/12/20 Javascript
jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
2015/08/07 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
Node.js中如何合并两个复杂对象详解
2016/12/31 Javascript
NodeJS收发GET和POST请求的示例代码
2017/08/25 NodeJs
微信小程序三级联动选择器使用方法
2020/05/19 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
[45:44]完美世界DOTA2联赛PWL S2 FTD vs PXG 第一场 11.27
2020/12/01 DOTA
python数据结构之列表和元组的详解
2017/09/23 Python
Flask数据库迁移简单介绍
2017/10/24 Python
Django 2.0版本的新特性抢先看!
2018/01/05 Python
Python中常见的异常总结
2018/02/20 Python
python 高效去重复 支持GB级别大文件的示例代码
2018/11/08 Python
python实现Flappy Bird源码
2018/12/24 Python
python批量修改文件夹及其子文件夹下的文件内容
2019/03/15 Python
Python自定义一个异常类的方法
2019/06/27 Python
Django 创建后台,配置sqlite3教程
2019/11/18 Python
西班牙灯具网上商店:Lampara.es
2018/06/05 全球购物
YOOX台湾:意大利奢侈品电商
2018/10/13 全球购物
Shopbop中文官网:美国亚马逊旗下时尚购物网站
2020/12/15 全球购物
Ajax实现页面无刷新留言效果
2021/03/24 Javascript
最新党员的自我评价分享
2013/11/04 职场文书
大学生两会精神学习心得体会
2014/03/10 职场文书
大学社团活动总结
2014/04/26 职场文书
服装区域经理岗位职责
2015/04/10 职场文书
病危通知单
2015/04/17 职场文书
谢师宴学生致辞
2015/07/27 职场文书
小学一年级班主任工作经验交流材料
2015/11/02 职场文书
中国梦宣传标语口号
2015/12/26 职场文书
Python 文本滚动播放器的实现代码
2021/04/25 Python
pytorch 中autograd.grad()函数的用法说明
2021/05/12 Python