关于@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常用的加密算法
Jun 11 Java/Android
Java SSH 秘钥连接mysql数据库的方法
Jun 28 Java/Android
gateway网关接口请求的校验方式
Jul 15 Java/Android
SpringBoot实现quartz定时任务可视化管理功能
Aug 30 Java/Android
Spring this调用当前类方法无法拦截的示例代码
Mar 20 Java/Android
Java中Quartz高可用定时任务快速入门
Apr 03 Java/Android
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
Apr 13 Java/Android
详细介绍Java中的CyclicBarrier
Apr 13 Java/Android
Java8利用Stream对列表进行去除重复的方法详解
Apr 14 Java/Android
SpringBoot全局异常处理方案分享
May 25 Java/Android
Java异常体系非正常停止和分类
Jun 14 Java/Android
SpringBoot详解自定义Stater的应用
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
咖啡与水的关系
2021/03/03 冲泡冲煮
PHP服务器页面间跳转实现方法
2012/08/02 PHP
PHP数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
ThinkPHP CURD方法之page方法详解
2014/06/18 PHP
Yii实现复选框批量操作实例代码
2017/03/15 PHP
IE6、IE7中获取Button元素的值的bug说明
2011/08/28 Javascript
javascript学习笔记(二十) 获得和设置元素的特性(属性)
2012/06/20 Javascript
cument.execCommand()用法深入理解
2012/12/04 Javascript
js实现带搜索功能的下拉框实时搜索实时匹配
2013/11/05 Javascript
一个js导致的jquery失效问题的解决方法
2013/11/27 Javascript
javascript实现回车键提交表单方法总结
2015/01/10 Javascript
javascript转换静态图片,增加粒子动画效果
2015/05/28 Javascript
js实现图片无缝滚动
2015/12/23 Javascript
Node.js的npm包管理器基础使用教程
2016/05/26 Javascript
js操作XML文件的实现方法兼容IE与FireFox
2016/06/25 Javascript
前端面试题及答案整理(二)
2016/08/26 Javascript
JavaScript动态检验密码强度的实现方法
2016/11/09 Javascript
BootstrapValidator超详细教程(推荐)
2016/12/07 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
jquery实现瀑布流效果 jquery下拉加载新数据
2016/12/12 Javascript
JS抛物线动画实例制作
2018/02/24 Javascript
JS中用EL表达式获取上下文参数值的方法
2018/03/28 Javascript
学习Vue组件实例
2018/04/28 Javascript
Python 面向对象 成员的访问约束
2008/12/23 Python
用Python写冒泡排序代码
2016/04/12 Python
使用python将图片按标签分入不同文件夹的方法
2018/12/08 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
2019/04/04 Python
python 中的9个实用技巧,助你提高开发效率
2020/08/30 Python
Django自带用户认证系统使用方法解析
2020/11/12 Python
python中pow函数用法及功能说明
2020/12/04 Python
澳洲女装时尚在线:Blue Bungalow
2018/05/05 全球购物
应届生服务员求职信
2013/10/31 职场文书
三好学生个人先进事迹材料
2014/05/17 职场文书
小区门卫岗位职责范本
2014/08/24 职场文书
2014财务年终工作总结
2014/12/08 职场文书
3招让你摆脱即兴讲话冷场尴尬
2019/08/08 职场文书