关于@OnetoMany关系映射的排序问题,使用注解@OrderBy

 更新时间:2021年12月6日 13:21  点击:323 作者:superyxw
目录
  • Spring里面一对多的关系可以用@OnetoMany注解来实现

    • 来看看我的这个例子

    • 看一下具体是怎么使用

    • 最后我的代码

  • Entity One-to-Many 排序设置


    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)
    );

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持猪先飞。

    原文出处:https://blog.csdn.net/superyxw/article/details/79942919

    [!--infotagslink--]

    相关文章

    • antdesign-vue结合sortablejs实现两个table相互拖拽排序功能

      这篇文章主要介绍了antdesign-vue结合sortablejs实现两个table相互拖拽排序功能,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-01-09
    • C# 参数按照ASCII码从小到大排序(字典序)

      这篇文章主要介绍了C# 参数按照ASCII码从小到大排序(字典序)的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
    • js实现列表按字母排序

      这篇文章主要为大家详细介绍了js实现列表按字母排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-11
    • C#实现排序的代码详解

      在本篇文章里小编给大家整理的是关于C#实现排序的代码以及相关知识点,需要的朋友们参考下。...2020-06-25
    • js实现数组冒泡排序、快速排序原理

      这篇文章主要为大家详细介绍了js实现数组冒泡排序、快速排序的原理,感兴趣的小伙伴们可以参考一下...2016-03-10
    • 图文详解Heap Sort堆排序算法及JavaScript的代码实现

      这篇文章以图文详解Heap Sort堆排序算法及JavaScript的代码实现,堆排序算法基于类二叉树的堆数据结构,需要的朋友可以参考下...2016-05-05
    • c# n个数排序实现代码

      c# n个数排序实现代...2020-06-25
    • 分享javascript实现的冒泡排序代码并优化

      本文给大家汇总介绍了几个个人收藏的JavaScript实现冒泡排序的代码,都是非常的不错,有需要的小伙伴可以参考下...2016-06-12
    • C#使用linq对数组进行筛选排序的方法

      这篇文章主要介绍了C#使用linq对数组进行筛选排序的方法,实例分析了C#实用linq扩展进行数组排序的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
    • JS实现的随机排序功能算法示例

      这篇文章主要介绍了JS实现的随机排序功能算法,结合具体实例形式分析了javascript常用的排序算法实现技巧,需要的朋友可以参考下...2017-06-15
    • C#实现冒泡排序算法的代码示例

      冒泡排序即是对数组每次轮循出最大数或最小数放在队尾,这里我们来看一下C#实现冒泡排序算法的代码示例,需要的朋友可以参考下...2020-06-25
    • 利用JavaScript对中文(汉字)进行排序实例详解

      排序是我们在日常开发中经常遇到的一个功能,下面这篇文章主要给大家介绍了利用JavaScript对中文(汉字)进行排序的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来看看吧。...2017-06-24
    • C++ STL关联式容器自定义排序规则的2种方法

      这篇文章主要介绍了C++ STL关联式容器自定义排序规则的2种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-04
    • JavaScript数值数组排序示例分享

      但是,我们在使用中就会发现问题,这里的数组排序方法并不是按照我们想像中的数字大小来排序的,而是按照字符串测试结果改变原先的数据。这并不是我们想要的。那么如何才可以得到我们想要的按照我们思维中的数字大小来排序...2014-05-31
    • jQuery实现对无序列表的排序功能(附demo源码下载)

      这篇文章主要介绍了jQuery实现对无序列表的排序功能,涉及jQuery与javascript常见的文本操作函数与sort排序函数的相关使用方法,具有一定参考借鉴价值,需要的朋友可以参考下...2016-07-01
    • C++ 字符串去重排序实例代码

      这篇文章主要介绍了C++ 字符串去重排序实例代码的相关资料,需要的朋友可以参考下...2020-04-25
    • C语言开发之归并排序详解及实例

      这篇文章主要介绍了 C语言开发之归并排序详解及实例的相关资料,需要的朋友可以参考下...2020-04-25
    • VC++实现选择排序算法简单示例

      这篇文章主要介绍了VC++实现选择排序算法简单示例,代码简洁易懂,有助于读者对数据结构与算法的学习,需要的朋友可以参考下...2020-04-25
    • vue实现页面div盒子拖拽排序功能

      本文主要介绍了vue实现页面div盒子拖拽排序功能,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-22
    • oracle实现按天,周,月,季度,年查询排序方法

      这篇文章主要介绍了oracle按天,周,月,季度,年查询排序功能,本文给出了sql语句,每种方法给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11