关于@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 @ConfigurationProperties和@PropertySource的区别
Jun 11 Java/Android
SpringBoot集成Redis,并自定义对象序列化操作
Jun 22 Java/Android
详解Java线程池是如何重复利用空闲线程的
Jun 26 Java/Android
mybatis中sql语句CDATA标签的用法说明
Jun 30 Java/Android
Java中多线程下载图片并压缩能提高效率吗
Jul 01 Java/Android
Java获取e.printStackTrace()打印的信息方式
Aug 07 Java/Android
Java网络编程之UDP实现原理解析
Sep 04 Java/Android
mybatis源码解读之executor包语句处理功能
Feb 15 Java/Android
Android 界面一键变灰 深色主题工具类
Apr 28 Java/Android
多线程Spring通过@Scheduled实现定时任务
May 25 Java/Android
SpringBoot Http远程调用的方法
Aug 14 Java/Android
java获取一个文本文件的编码(格式)信息
Sep 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 session_start()问题解疑(详细介绍)
2013/07/05 PHP
PHP date()函数警告: It is not safe to rely on the system解决方法
2014/08/20 PHP
php中instanceof 与 is_a()区别分析
2015/03/03 PHP
用javascript实现页面打印的三种方法
2007/03/05 Javascript
JQuery 1.6发布 性能提升,同时包含大量破坏性变更
2011/05/10 Javascript
jquery实现点击文字可编辑并修改保存至数据库
2014/04/15 Javascript
JS遍历Json字符串中键值对先转成JSON对象再遍历
2014/08/15 Javascript
在Node.js中使用HTTP上传文件的方法
2015/06/23 Javascript
Jquery 自定义事件实现发布/订阅的简单实例
2016/06/12 Javascript
js实现表单及时验证功能 用户信息立即验证
2016/09/13 Javascript
JavaScript递归操作实例浅析
2016/10/31 Javascript
JavaScript的事件机制详解
2017/01/17 Javascript
老生常谈javascript的面向对象思想
2017/08/22 Javascript
JS实现从对象获取对象中单个键值的方法示例
2019/06/05 Javascript
Vue-drag-resize 拖拽缩放插件的使用(简单示例)
2019/12/04 Javascript
vue 需求 data中的数据之间的调用操作
2020/08/05 Javascript
vue使用openlayers实现移动点动画
2020/09/24 Javascript
Python读写Redis数据库操作示例
2014/03/18 Python
Python实现子类调用父类的方法
2014/11/10 Python
Python访问MySQL封装的常用类实例
2014/11/11 Python
asyncio 的 coroutine对象 与 Future对象使用指南
2016/09/11 Python
利用python将json数据转换为csv格式的方法
2018/03/22 Python
python Django的web开发实例(入门)
2019/07/31 Python
Django 项目重命名的实现步骤解析
2019/08/14 Python
python实现跨excel sheet复制代码实例
2020/03/03 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
2020/05/27 Python
为你的html5网页添加音效示例
2014/04/03 HTML / CSS
加州风格的游泳和沙滩装品牌:Cupshe
2019/06/10 全球购物
Rentalcars.com中国:世界上最大的在线汽车租赁服务
2019/08/22 全球购物
几个MySql的面试题
2013/04/22 面试题
shell的种类有哪些
2015/04/15 面试题
年终考核实施方案
2014/05/26 职场文书
2014大学生中国梦主题教育学习思想汇报
2014/09/10 职场文书
个人批评与自我批评范文
2014/10/17 职场文书
土木工程生产实习心得体会
2016/01/22 职场文书
会议主持词通用版
2019/04/02 职场文书