[英]Hibernate @OrderBy for nested properties
我需要使用@OrderBy(JPA,Hibernate作為提供程序)來為嵌套屬性排序集合:
@OneToMany(mappedBy = "paramSpec", cascade = CascadeType.ALL)
@OrderBy("release.ordinal")
private List<PkdbParameter> pkdbParams;
在PkdbParameter.java中:
...
@ManyToOne
@JoinColumn(name = "release_id")
private Release release;
...
在Release.java中:
...
private int ordinal;
...
(所有這些字段都提供簡單的getter和setter)
不幸的是我收到了錯誤:
Caused by: org.hibernate.AnnotationException: property from @OrderBy clause not found: some.package.PkdbParameter.release.ordinal
這段代碼出了什么問題? 如果不可能使用嵌套屬性表示法有沒有其他方式來訂購ordinal
屬性?
@OrderBy
僅適用於直接屬性或嵌入屬性。 來自Java EE 6文檔
點(“。”)表示法用於表示嵌入屬性中的屬性
因此,如果Release
是嵌入式屬性,則可以使用。 否則,您可以使用此處建議的命名查詢
您可以使用Hibernate @SortComparator
注釋:
像這樣:
@OneToMany(mappedBy = "paramSpec", cascade = CascadeType.ALL)
@SortComparator(ReleaseComparator.class)
private List<PkdbParameter> pkdbParams;
CameraNameComparator的位置是:
public class ReleaseComparator implements Comparator<PkdbParameter> {
@Override
public int compare(PkdbParameter o1, PkdbParameter o2) {
return o1.getRelease().getOrdinal().compareTo( o2.getRelease().getOrdinal() );
}
}
您可以拆分訂單語句並將其放在非集合屬性上:
@OneToMany(mappedBy = "paramSpec", cascade = CascadeType.ALL)
@OrderBy("release")
private List<PkdbParameter> pkdbParams;
和
@ManyToOne
@JoinColumn(name = "release_id")
@OrderBy("ordinal")
private Release release;
作為副作用,您已經修復了PkdbParameter的排序順序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.