关于@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 Data JPA的Audit功能审计数据库的变更
Jun 26 Java/Android
Java中使用Filter过滤器的方法
Jun 28 Java/Android
java实现对Hadoop的操作
Jul 01 Java/Android
Java 泛型详解(超详细的java泛型方法解析)
Jul 02 Java/Android
JPA 通过Specification如何实现复杂查询
Nov 23 Java/Android
IDEA 2022 Translation 未知错误 翻译文档失败
Apr 24 Java/Android
Mybatis-Plus 使用 @TableField 自动填充日期
Apr 26 Java/Android
Spring Data JPA框架的核心概念和Repository接口
Apr 28 Java/Android
解决Springboot PostMapping无法获取数据的问题
May 06 Java/Android
Java 数组的使用
May 11 Java/Android
ConditionalOnProperty配置swagger不生效问题及解决
Jun 14 Java/Android
Spring Cloud OpenFeign模版化客户端
Jun 25 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中4个加速、缓存扩展的区别和选用建议
2014/03/12 PHP
PHP如何实现Unicode和Utf-8编码相互转换
2015/07/29 PHP
PHP-FPM 的管理和配置详解
2019/02/17 PHP
laravel5.2表单验证,并显示错误信息的实例
2019/09/29 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
JavaScript 对象模型 执行模型
2009/12/06 Javascript
Json字符串转换为JS对象的高效方法实例
2013/05/01 Javascript
鼠标焦点离开文本框时验证的js代码
2013/07/19 Javascript
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
浅析javascript中function 的 length 属性
2014/05/27 Javascript
js弹出窗口返回值的简单实例
2016/05/28 Javascript
jQuery表单对象属性过滤选择器实例详解
2016/09/13 Javascript
JavaScript数组去重的几种方法效率测试
2016/10/23 Javascript
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
Vue之Watcher源码解析(1)
2017/07/19 Javascript
layui动态渲染生成左侧3级菜单的方法(根据后台返回数据)
2019/09/23 Javascript
python实现迭代法求方程组的根过程解析
2019/11/25 Javascript
javascript实现放大镜功能
2020/12/09 Javascript
vue-cli4.0多环境配置变量与模式详解
2020/12/30 Vue.js
Python 类与元类的深度挖掘 I【经验】
2016/05/06 Python
python实现俄罗斯方块游戏
2020/03/25 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
2019/03/05 Python
python多进程间通信代码实例
2019/09/30 Python
用python的turtle模块实现给女票画个小心心
2019/11/23 Python
opencv python在视屏上截图功能的实现
2020/03/05 Python
解决pyqt5异常退出无提示信息的问题
2020/04/08 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
2020/05/13 Python
Python使用Excel将数据写入多个sheet
2020/05/16 Python
纯CSS3实现鼠标滑过按钮动画第二节
2020/07/16 HTML / CSS
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
遇到的Mysql的面试题
2014/06/29 面试题
laravel使用redis队列实例讲解
2021/03/23 PHP
党员志愿者活动总结
2014/06/26 职场文书
2015年团委副书记工作总结
2015/07/23 职场文书
python 如何在 Matplotlib 中绘制垂直线
2021/04/02 Python
一些让Python代码简洁的实用技巧总结
2021/08/23 Python