关于@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并发编程之详解CyclicBarrier线程同步
Jun 23 Java/Android
每日六道java新手入门面试题,通往自由的道路
Jun 30 Java/Android
SpringBoot工程下使用OpenFeign的坑及解决
Jul 02 Java/Android
看完这篇文章获得一些java if优化技巧
Jul 15 Java/Android
springboot 启动如何排除某些bean的注入
Aug 02 Java/Android
Spring Security中用JWT退出登录时遇到的坑
Oct 16 Java/Android
Spring中的使用@Async异步调用方法
Nov 01 Java/Android
聊聊Lombok中的@Builder注解使用教程
Nov 17 Java/Android
Java实现学生管理系统(IO版)
Feb 24 Java/Android
springboot+zookeeper实现分布式锁
Mar 21 Java/Android
Android Flutter实现3D动画效果示例详解
Apr 07 Java/Android
SpringBoot详解整合Redis缓存方法
Jul 15 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/01/29 PHP
Zend Studio使用技巧两则
2016/04/01 PHP
PHP替换Word中变量并导出PDF图片的实现方法
2020/11/26 PHP
javascript学习笔记(十四) window对象使用介绍
2012/06/20 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
jQuery插件scroll实现无缝滚动效果
2015/04/27 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
Ajax异步获取html数据中包含js方法无效的解决方法
2017/02/20 Javascript
详解Angular 4 表单快速入门
2017/06/05 Javascript
使用RN Animated做一个“添加购物车”动画的方法
2018/09/12 Javascript
详解nodejs 配置文件处理方案
2019/01/02 NodeJs
Vue配置marked链接添加target=&quot;_blank&quot;的方法
2019/07/19 Javascript
Node.js 实现简单的无侵入式缓存框架的方法
2019/07/21 Javascript
在vue中利用v-html按分号将文本换行的例子
2019/11/14 Javascript
基于Vue+ElementUI的省市区地址选择通用组件
2019/11/20 Javascript
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
基于canvas实现手写签名(vue)
2020/05/21 Javascript
vuex中store存储store.commit和store.dispatch的用法
2020/07/24 Javascript
微信小程序完美解决scroll-view高度自适应问题的方法
2020/08/08 Javascript
[56:41]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs OG
2018/04/01 DOTA
[38:42]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第二场 11.05
2020/11/05 DOTA
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
2013/12/06 Python
简单介绍Python中的struct模块
2015/04/28 Python
详解分布式任务队列Celery使用说明
2018/11/29 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
2019/01/09 Python
用Python从0开始实现一个中文拼音输入法的思路详解
2019/07/20 Python
手写一个python迭代器过程详解
2019/08/27 Python
用python实现学生管理系统
2020/07/24 Python
CSS3 实现童年的纸飞机
2019/05/05 HTML / CSS
美国旅游网站:Tours4Fun
2017/02/17 全球购物
什么是托管函数?托管函数有什么用?
2014/06/15 面试题
大学生职业规划书的范本
2014/02/18 职场文书
财务总监管理岗位职责
2014/03/08 职场文书
艺术节开幕词
2015/01/28 职场文书
市场总监岗位职责
2015/02/11 职场文书
珍爱生命主题班会
2015/08/13 职场文书