关于@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 22 Java/Android
详解Java实现数据结构之并查集
Jun 23 Java/Android
Java实现多线程聊天室
Jun 26 Java/Android
Java 数组内置函数toArray详解
Jun 28 Java/Android
浅谈sql_@SelectProvider及使用注意说明
Aug 04 Java/Android
关于Spring配置文件加载方式变化引发的异常详解
Jan 18 Java/Android
java项目构建Gradle的使用教程
Mar 24 Java/Android
Java详细解析==和equals的区别
Apr 07 Java/Android
Spring Data JPA框架Repository自定义实现
Apr 28 Java/Android
java版 简单三子棋游戏
May 04 Java/Android
SpringBoot详解整合Redis缓存方法
Jul 15 Java/Android
Java Spring读取和存储详细操作
Aug 05 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
利用curl 多线程 模拟 并发的详解
2013/06/14 PHP
PHP中call_user_func_array回调函数的用法示例
2016/11/26 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
javascript 无提示关闭窗口脚本
2009/08/17 Javascript
在jQuery中 常用的选择器介绍
2013/04/16 Javascript
jQuery中after的两种用法实例
2013/07/03 Javascript
jQuery切换所有复选框选中状态的方法
2015/07/02 Javascript
用canvas 实现个图片三角化(LOW POLY)效果
2016/02/18 Javascript
jQuery实现ajax的叠加和停止(终止ajax请求)
2016/08/08 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
react中使用css的7中方式(最全总结)
2019/02/11 Javascript
JS 设计模式之:工厂模式定义与实现方法浅析
2020/05/06 Javascript
python实现得到一个给定类的虚函数
2014/09/28 Python
python 写入csv乱码问题解决方法
2016/10/23 Python
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
2016/12/14 Python
python+opencv实现动态物体识别
2018/01/09 Python
对python实现二维函数高次拟合的示例详解
2018/12/29 Python
python批量下载抖音视频
2019/06/17 Python
python web框架中实现原生分页
2019/09/08 Python
python实现一个简单RPC框架的示例
2020/10/28 Python
浅谈HTML5 &amp; CSS3的新交互特性
2016/07/19 HTML / CSS
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
会话Bean的种类
2013/11/07 面试题
会计专业自荐信范文
2013/12/02 职场文书
西门豹教学反思
2014/02/04 职场文书
火锅店营销方案
2014/02/26 职场文书
运动会开幕式主持词
2014/03/28 职场文书
流动人口婚育证明
2014/10/19 职场文书
2014年医务科工作总结
2014/12/18 职场文书
信访工作个人总结
2015/03/03 职场文书
2016年“六一儿童节”校园广播稿
2015/12/17 职场文书
《秋天的怀念》教学反思
2016/02/17 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书
python 模拟在天空中放风筝的示例代码
2021/04/21 Python
Java基于字符界面的简易收银台
2021/06/26 Java/Android
一篇文章带你深入了解Mysql触发器
2021/08/02 MySQL