关于@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 相关文章推荐
解决Maven项目中 Invalid bound statement 无效的绑定问题
Jun 15 Java/Android
Java实现多线程聊天室
Jun 26 Java/Android
Java生成读取条形码和二维码的简单示例
Jul 09 Java/Android
SpringBoot实现quartz定时任务可视化管理功能
Aug 30 Java/Android
Spring-cloud Config Server的3种配置方式
Sep 25 Java/Android
mybatis源码解读之executor包语句处理功能
Feb 15 Java/Android
Java实现二分搜索树的示例代码
Mar 17 Java/Android
Java 超详细讲解ThreadLocal类的使用
Apr 07 Java/Android
Android开发之WECHAT微信小程序路由跳转的两种形式
Apr 12 Java/Android
Java 多态分析
Apr 26 Java/Android
Java 多线程协作作业之信号同步
May 11 Java/Android
解决spring.thymeleaf.cache=false不起作用的问题
Jun 10 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 api函数实现数组的交换排序示例
2014/04/13 PHP
PHP网络操作函数汇总
2015/05/18 PHP
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
Javascript小技能总结(推荐)
2016/06/02 Javascript
AngularJS+Bootstrap实现多文件上传与管理
2016/11/08 Javascript
webuploader模态框ueditor显示问题解决方法
2016/12/27 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
一道面试题引发的对javascript类型转换的思考
2017/03/06 Javascript
限时抢购-倒计时的完整实例(分享)
2017/09/17 Javascript
Vue项目中跨域问题解决方案
2018/06/05 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
[01:01:04]2018DOTA2亚洲邀请赛 4.5 淘汰赛 OpTic vs TNC 第一场
2018/04/06 DOTA
简单介绍Python的Django框架的dj-scaffold项目
2015/05/30 Python
Python自动生产表情包
2017/03/17 Python
浅谈Django REST Framework限速
2017/12/12 Python
Python实现GUI学生信息管理系统
2020/04/05 Python
Python 使用PIL中的resize进行缩放的实例讲解
2018/08/03 Python
Python开发的十个小贴士和技巧及长常犯错误
2018/09/27 Python
Python3.5实现的罗马数字转换成整数功能示例
2019/02/25 Python
Python 等分切分数据及规则命名的实例代码
2019/08/16 Python
Django之编辑时根据条件跳转回原页面的方法
2019/08/21 Python
Window系统下Python如何安装OpenCV库
2020/03/05 Python
iPython pylab模式启动方式
2020/04/24 Python
HTML5+css3:3D旋转木马效果相册
2017/01/03 HTML / CSS
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
计算机毕业生自荐信范文
2014/03/23 职场文书
幼儿园迎国庆65周年活动策划方案
2014/09/16 职场文书
卖车协议书范例
2014/09/16 职场文书
工作散漫检讨书
2014/09/16 职场文书
2014年团支部工作总结
2014/11/17 职场文书
安全守法证明
2015/06/23 职场文书
员工考勤管理制度
2015/08/06 职场文书
安全教育日主题班会
2015/08/13 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书
星际争霸 Light vs Action 一场把教主看到鬼畜的比赛
2022/04/01 星际争霸
SqlServer常用函数及时间处理小结
2023/05/08 SQL Server