這裏是我的模型:休眠排序實體<字符串,兒童>
@Entity
@Table(name = "parent")
public class Parent {
...
@OneToMany(fetch = FetchType.LAZY, orphanRemoval = true, cascade = { CascadeType.REMOVE}, mappedBy = "parent")
@MapKeyColumn(name = "key")
private Map<String, Child> children;
...
}
@Entity
@Table(name = "child")
public class Child {
...
@Column(name = "key")
private String key;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
private Parent parent;
@Column(name = "property")
private String property;
...
}
該映射是有用的,並適用於插入,更新,刪除的entites和選擇它們。
現在,我必須使用他們的子項屬性(取決於地圖鍵),像order by parent.children[<particular key>].property asc
子句(我沒有在HQL中找到)那樣訂購父實體。我也不知道如何使用Criteria API來實現這一點。任何想法?
我現在唯一的解決方案是選擇由key
篩選並按property
排序的兒童,然後逐個Java代碼獲取父母,即使使用「獲取父母」設置也無效。
我不知道它是否有效,但是您是否在'Parent.children'上嘗試了'@ OrderBy'註釋?它應該是'@OrderBy(「property asc」)'。 –
註釋類型OrderBy:指定在檢索關聯或集合時集合值關聯或元素集合的元素排序。 似乎不是我的情況,因爲用於對映射集合中的項進行排序 – Aeteros
由於'Map'沒有內在排序,我懷疑這是可以使用JPA的,因爲您不能指定Hibernate應該使用可排序的'Map'作爲實現。 – Smutje