关于@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 13 Java/Android
Java实现简易的分词器功能
Jun 15 Java/Android
springboot如何初始化执行sql语句
Jun 22 Java/Android
解决Swagger2返回map复杂结构不能解析的问题
Jul 02 Java/Android
java调用Restful接口的三种方法
Aug 23 Java/Android
spring cloud 配置中心客户端启动遇到的问题
Sep 25 Java/Android
alibaba seata服务端具体实现
Feb 24 Java/Android
Java练习之潜艇小游戏的实现
Mar 16 Java/Android
SpringBoot2零基础到精通之数据与页面响应
Mar 22 Java/Android
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
Jun 01 Java/Android
利用Java连接Hadoop进行编程
Jun 28 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
使用dump函数,给php加断点测试
2013/06/25 PHP
PHP查看当前变量类型的方法
2015/07/31 PHP
php面向对象与面向过程两种方法给图片添加文字水印
2015/08/26 PHP
jQuery EasyUI API 中文文档 - ValidateBox验证框
2011/10/06 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
jQuery 插件开发指南
2014/11/14 Javascript
微信小程序新增的拖动组件movable-view使用教程
2017/05/20 Javascript
微信小程序获取音频时长与实时获取播放进度问题
2018/08/28 Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
2018/10/24 Javascript
vue插件draggable实现拖拽移动图片顺序
2018/12/01 Javascript
Vue指令指令大全
2019/02/09 Javascript
vue-cli3 项目优化之通过 node 自动生成组件模板 generate View、Component
2019/04/30 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
使用Python内置的模块与函数进行不同进制的数的转换
2016/03/12 Python
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
2016/09/18 Python
python ftp 按目录结构上传下载的实现代码
2018/09/12 Python
Pandas DataFrame 取一行数据会得到Series的方法
2018/11/10 Python
Python3enumrate和range对比及示例详解
2019/07/13 Python
face++与python实现人脸识别签到(考勤)功能
2019/08/28 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
python实现按首字母分类查找功能
2019/10/31 Python
redis数据库及与python交互用法简单示例
2019/11/01 Python
解决pycharm 安装numpy失败的问题
2019/12/05 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
2019/12/10 Python
TFRecord格式存储数据与队列读取实例
2020/01/21 Python
windows、linux下打包Python3程序详细方法
2020/03/17 Python
Python参数传递对象的引用原理解析
2020/05/22 Python
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
Stio官网:男女、儿童户外服装
2019/12/13 全球购物
AJAX检测用户名是否存在的方法
2021/03/24 Javascript
会计电算化应届生自荐信
2014/02/25 职场文书
金融管理毕业生求职信
2014/03/03 职场文书
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
公安纪律作风整顿心得体会
2016/01/23 职场文书
了解Kubernetes中的Service和Endpoint
2022/04/01 Servers
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL