关于@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 相关文章推荐
SpringBoot生成License的实现示例
Jun 16 Java/Android
浅谈自定义校验注解ConstraintValidator
Jun 30 Java/Android
分析ZooKeeper分布式锁的实现
Jun 30 Java/Android
Java使用jmeter进行压力测试
Jul 09 Java/Android
一篇文章带你学习Mybatis-Plus(新手入门)
Aug 02 Java/Android
Java spring定时任务详解
Oct 05 Java/Android
关于@OnetoMany关系映射的排序问题,使用注解@OrderBy
Dec 06 Java/Android
alibaba seata服务端具体实现
Feb 24 Java/Android
Java 超详细讲解数据结构中的堆的应用
Apr 02 Java/Android
Java工作中实用的代码优化技巧分享
Apr 21 Java/Android
Java由浅入深通关抽象类与接口(上篇)
Apr 26 Java/Android
SpringBoot使用ip2region获取地理位置信息的方法
Jun 21 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
基于PHPExcel的常用方法总结
2013/06/13 PHP
jQuery+php实现ajax文件即时上传的详解
2013/06/17 PHP
PHP中is_dir()函数使用指南
2015/05/08 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
2016/04/04 PHP
Yii2数据库操作常用方法小结
2017/05/04 PHP
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
2006/09/22 Javascript
两种WEB下的模态对话框 (asp.net或js的分别实现)
2009/12/02 Javascript
jQuery 表单验证扩展(三)
2010/10/20 Javascript
javascript动态生成树形菜单的方法
2015/11/14 Javascript
jQuery根据name属性进行查找的用法分析
2016/06/23 Javascript
关于Vue.js一些问题和思考学习笔记(2)
2016/12/02 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
2017/01/05 Javascript
jQuery简单获取DIV和A标签元素位置的方法
2017/02/07 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
2017/02/14 Javascript
Extjs gridpanel 中的checkbox(复选框)根据某行的条件不能选中的解决方法
2017/02/17 Javascript
Jquery异步上传文件代码实例
2019/11/13 jQuery
vant 中van-list的用法说明
2020/11/11 Javascript
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
[38:32]完美世界DOTA2联赛循环赛 Forest vs DM 第二场 11.06
2020/11/06 DOTA
Python中条件判断语句的简单使用方法
2015/08/21 Python
Python文件常见操作实例分析【读写、遍历】
2018/12/10 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
python tkinter图形界面代码统计工具(更新)
2019/09/18 Python
python 单线程和异步协程工作方式解析
2019/09/28 Python
Python编程快速上手——PDF文件操作案例分析
2020/02/28 Python
python如何保存文本文件
2020/06/07 Python
CHRONEXT英国:您的首选奢华腕表目的地
2020/03/30 全球购物
青春励志演讲稿
2014/04/29 职场文书
护士演讲稿优秀范文
2014/04/30 职场文书
发布会邀请函
2015/01/31 职场文书
博士给导师的自荐信
2015/03/06 职场文书
2015年简历自我评价范文
2015/03/11 职场文书
2015年七一建党节演讲稿
2015/03/19 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书
golang操作rocketmq的示例代码
2022/04/06 Golang
Go语言测试库testify使用学习
2022/07/23 Golang