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

网友投稿 953 2022-11-17

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

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

目录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 pictures;

然后我在取值的时候怎样才能让图片按照我的要求来进行排序呢

就是使用@OrderBy

看一下具体是怎么使用

@Target({METHOD, FIELD})

@Retention(RUNTIME)

public @interface OrderBy {

/**

* An orderby_list. Specified as follows:

*

*

* orderby_list::= orderby_item [,orderby_item]*

* orderby_item::= [property_or_field_name] [ASC | DESC]

*

*

*

If ASC or DESC is not specified,

* ASC (ascending order) is assumed.

*

*

If the ordering element is not specified, ordering by

ksBZECdlxc* 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 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(nullabhttp://le = false)

private String content;

/**

* comments评论,与之进行一对多关联。

* FetchType.EAGER 获取新闻时立即相关评论。

* CascadeType.ALL 支持所有级联操作。

* 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 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,

PRhttp://IMARY KEY (NEWS_ID, COMMENT_ID),

FOREIGN KEY (NEWS_ID) REFERENCES NEWS(ID),

FOREIGN KEY (COMMENT_ID) REFERENCES TCOMMENT(ID)

);

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:8.插值(上)
下一篇:设置容器的技巧(最佳实践)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~