[英]Hibernate: Ordering objects based on age
我有2個Hibernate實體: Kennel
和Dog
。
我想寫一個方法來確定數據庫中“最老的”狗窩是什么。
如果“狗窩實體”具有“已創建”或類似的列,但沒有 ,這將是微不足道的。
但是,在我的Dog實體中,有一個born
字段(DateTime)映射到BORN column
。
我想使用此Dog字段定義其中包含最老狗的最老狗窩 。
狗窩可以養很多狗,但一只狗只能養一個狗窩。
我怎樣才能做到這一點?
實體:
狗窩:
@Entity
@Table(name = "KENNEL")
public class Kennel
{
@Id
private String id;
@Column(name = "LOCATION")
private String location;
}
狗:
@Entity
@Table(name = "DOG")
public class Dog
{
@Id
private String id;
@Column(name = "NAME")
private String name;
@Column(name = "BORN")
private DateTime created;
@Column(name= "KENNEL_ID)
private String kennelId;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "KENNEL_ID")
private Kennel kennel;
}
為什么不只找到最老的狗(就像您所說的那樣瑣碎),然后再使用dog.kennel
獲取狗窩?
嘗試實現@Mark的建議。
如下所示,在Dog
類中創建一個命名查詢,然后從DAO調用它。
@Entity
@Table(name = "DOG")
@NamedQueries({
@NamedQuery(name="Dog.findOldestKennel", query="SELECT d.kennel
FROM Dog d order by d.created ASC LIMIT 1"),
@NamedQuery(name="Dog.getAllKennelsInAgeOrder", query="SELECT d.kennel
FROM Dog d order by d.created ASC")
})
public class Dog {
@Id
private String id;
@Column(name = "NAME")
private String name;
@Column(name = "BORN")
private DateTime created;
@Column(name= "KENNEL_ID)
private String kennelId;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "KENNEL_ID")
private Kennel kennel;
}
下面顯示了一個使用HibernateEntityManager的示例DAO方法(您的項目實現可能有所不同),用於按照您說的順序獲取所有狗窩。 在這里,我們調用在Dog
類中創建的命名查詢,並返回結果列表。
public List<Kennel> getAllKennels(){
try{
// name of the desired NamedQuery to run should be given
Query queryStr = this.entityManager
.createNamedQuery("Dog.getAllKennelsInAgeOrder");
List<Kennel> kennels = queryStr.getResultList();
if(null != kennels && !kennels.isEmpty()){
return kennels;
} else {
return Collections.emptyList();
}
} catch (Exception e) {
LOGGER.error("Exception Occcured in getAllKennels ", e);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.