關(guān)于@OnetoMany關(guān)系映射的排序問題,使用注解@OrderBy
Spring里面一對多的關(guān)系可以用@OnetoMany注解來實(shí)現(xiàn)
然后在實(shí)際使用中,如果要對從屬對象按條件排序該怎么處理呢?可以用注解來實(shí)現(xiàn)的也就是@OrderBy
來看看我的這個(gè)例子
一個(gè)Product對象,里面有個(gè)OnetoMany關(guān)系對應(yīng)到多張圖片,然后我這個(gè)圖片在后臺要支持排序,所以我就在Picture這個(gè)類里面加了一個(gè)ordernum的int型字段來進(jìn)行排序標(biāo)記
@OneToMany(cascade = CascadeType.ALL,mappedBy = "product",fetch = FetchType.EAGER) private List<Picture> pictures;
然后我在取值的時(shí)候怎樣才能讓圖片按照我的要求來進(jìn)行排序呢
就是使用@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 "";
}
通過這個(gè)注解的定義可以看出它的參數(shù)就是一個(gè)String
比如我項(xiàng)目里按照圖片的ordernum升序排列就是@OrderBy("ordernum ASC");ordernum是字段名 ASC對應(yīng)排序方式,中間用空格隔開
當(dāng)然也支持多個(gè)條件進(jìn)行排序,比如我要通過ordernum和id進(jìn)行,那就是@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 排序設(shè)置
/**
* 評論實(shí)體類,對應(yīng) TCOMMENT 表。
* @author William
*/
@Entity
@Table(name = "TCOMMENT")
public class Comment {
/**
* 標(biāo)識ID字段為主鍵,主鍵生成策略為:自動。
*/
@Id @GeneratedValue
private Long id;
private String nickname;
private String content;
private Integer note;
/**
* 發(fā)表日期,對應(yīng) posted_date 字段,字段類型為TIMESTAMP。
*/
@Column(name = "posted_date")
@Temporal(TemporalType.TIMESTAMP)
private Date postedDate;
// Constructors, setters, getters
}
/**
* 新聞實(shí)體類,對應(yīng) News表。
* @author William
*/
@Entity
@NamedQuery(name = "findAllNews", query = "SELECT n FROM News n")
public class News {
/**
* 標(biāo)識ID字段為主鍵,主鍵生成策略為:自動。
*/
@Id @GeneratedValue
private Long id;
/**
* content新聞內(nèi)容,該字段必填。
*/
@Column(nullable = false)
private String content;
/**
* comments評論,與之進(jìn)行一對多關(guān)聯(lián)。<br/>
* FetchType.EAGER 獲取新聞時(shí)立即相關(guān)評論。<br/>
* CascadeType.ALL 支持所有級聯(lián)操作。<br/>
* OrderBy 獲取評論列表時(shí),按照postedDate(發(fā)表日期)降序排列。
*/
@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) );
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java中char數(shù)組(字符數(shù)組)與字符串String類型的轉(zhuǎn)換方法
這篇文章主要介紹了Java中char數(shù)組(字符數(shù)組)與字符串String類型的轉(zhuǎn)換方法,涉及Java中toCharArray與valueOf方法的使用技巧,需要的朋友可以參考下2015-12-12
Java實(shí)現(xiàn)一個(gè)簡單的長輪詢的示例代碼
長輪詢是與服務(wù)器保持即時(shí)通信的最簡單的方式,它不使用任何特定的協(xié)議,例如 WebSocket ,所以也不依賴于瀏覽器版本等外部條件的兼容性。本文將用Java實(shí)現(xiàn)一個(gè)簡單的長輪詢,需要的可以參考一下2022-08-08
SpringBoot項(xiàng)目構(gòu)建Maven標(biāo)簽及屬性用法詳解
在?Spring?Boot?項(xiàng)目中,Maven?是最常用的構(gòu)建工具之一,本文將詳細(xì)介紹?Maven?依賴管理中的主要標(biāo)簽及其使用方法,幫助開發(fā)者更好地理解和使用?Maven?構(gòu)建工具,感興趣的朋友跟隨小編一起看看吧2024-08-08
java開發(fā)BeanUtils類解決實(shí)體對象間賦值
這篇文章主要為大家介紹了java開發(fā)中使用BeanUtils類實(shí)現(xiàn)實(shí)體對象之間的賦值有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步學(xué)有所得2021-10-10

