关于@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 相关文章推荐
Spring boot应用启动后首次访问很慢的解决方案
Jun 23 Java/Android
每日六道java新手入门面试题,通往自由的道路
Jun 30 Java/Android
使用Springboot实现健身房管理系统
Jul 01 Java/Android
JavaWeb 入门:Hello Servlet
Jul 16 Java/Android
SpringBoot整合阿里云视频点播的过程详解
Dec 06 Java/Android
Java虚拟机内存结构及编码实战分享
Apr 07 Java/Android
springcloud整合seata
May 20 Java/Android
Java中的Kotlin 内部类原理
Jun 16 Java/Android
springboot 全局异常处理和统一响应对象的处理方式
Jun 28 Java/Android
一文了解Java动态代理的原理及实现
Jul 07 Java/Android
阿里面试Nacos配置中心交互模型是push还是pull原理解析
Jul 23 Java/Android
基于Android10渲染Surface的创建过程
Aug 14 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页面间参数传递的四种方法详解
2013/06/09 PHP
php解析字符串里所有URL地址的方法
2015/04/03 PHP
Laravel 5框架学习之Blade 简介
2015/04/08 PHP
php三元运算符知识汇总
2015/07/02 PHP
统计PHP目录中的文件数方法
2019/03/05 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
jquery.validate分组验证代码
2011/03/17 Javascript
JQuery里选择超链接的实现代码
2011/05/22 Javascript
javascript针对DOM的应用实例(一)
2012/04/15 Javascript
JavaScript之IE的fireEvent方法详细解析
2013/11/20 Javascript
javascript中几个容易混淆的概念总结
2015/04/14 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
2016/06/12 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
jQuery  ready方法实现原理详解
2016/10/19 Javascript
深入探究node之Transform
2017/07/20 Javascript
vue单页面实现当前页面刷新或跳转时提示保存
2018/11/02 Javascript
微信小程序自定义tabBar的踩坑实践记录
2020/11/06 Javascript
Python高效编程技巧
2013/01/07 Python
用Python计算三角函数之atan()方法的使用
2015/05/15 Python
Python 迭代器工具包【推荐】
2016/05/06 Python
python八大排序算法速度实例对比
2017/12/06 Python
python SMTP实现发送带附件电子邮件
2018/05/22 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
使用Django开发简单接口实现文章增删改查
2019/05/09 Python
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
Oracle中delete,truncate和drop的区别
2016/05/05 面试题
非常详细的C#面试题集
2016/07/13 面试题
简历自我评价模版
2014/01/31 职场文书
《台湾的蝴蝶谷》教学反思
2014/02/20 职场文书
公司合作协议书范本
2014/04/18 职场文书
优质服务活动实施方案
2014/05/02 职场文书
代理人委托书
2014/09/16 职场文书
师德师风个人自我剖析材料
2014/09/27 职场文书
大学生英文求职信范文
2015/03/19 职场文书
中学生社会实践教育活动总结
2015/05/06 职场文书
Nest.js参数校验和自定义返回数据格式详解
2021/03/29 Javascript