Pio*_*zyk 10 java orm hibernate jpa hibernate-mapping
我需要使用@OrderBy(JPA,Hibernate作为提供者)来为嵌套属性排序集合:
@OneToMany(mappedBy = "paramSpec", cascade = CascadeType.ALL)
@OrderBy("release.ordinal")
private List<PkdbParameter> pkdbParams;
Run Code Online (Sandbox Code Playgroud)
在PkdbParameter.java中:
...
@ManyToOne
@JoinColumn(name = "release_id")
private Release release;
...
Run Code Online (Sandbox Code Playgroud)
在Release.java中:
...
private int ordinal;
...
Run Code Online (Sandbox Code Playgroud)
(所有这些字段都提供简单的getter和setter)
不幸的是我收到了错误:
Caused by: org.hibernate.AnnotationException: property from @OrderBy clause not found: some.package.PkdbParameter.release.ordinal
这段代码出了什么问题?如果不可能使用嵌套属性表示法有没有其他方法来订购ordinal属性?
Vla*_*cea 11
您可以使用 Hibernate@SortComparator注释:
像这样:
@OneToMany(mappedBy = "paramSpec", cascade = CascadeType.ALL)
@SortComparator(ReleaseComparator.class)
private List<PkdbParameter> pkdbParams;
Run Code Online (Sandbox Code Playgroud)
其中 CameraNameComparator 是:
public class ReleaseComparator implements Comparator<PkdbParameter> {
@Override
public int compare(PkdbParameter o1, PkdbParameter o2) {
return o1.getRelease().getOrdinal().compareTo( o2.getRelease().getOrdinal() );
}
}
Run Code Online (Sandbox Code Playgroud)
@OrderBy仅适用于直接属性或嵌入属性。来自Java EE 6 文档
点(“.”)表示法用于引用嵌入属性中的属性
因此,如果 是Release嵌入属性,则这可以工作。否则,您可以按照此处的建议使用命名查询
| 归档时间: |
|
| 查看次数: |
6969 次 |
| 最近记录: |