簡體   English   中英

休眠:根據年齡排序對象

[英]Hibernate: Ordering objects based on age

我有2個Hibernate實體: KennelDog

我想寫一個方法來確定數據庫中“最老的”狗窩是什么。

如果“狗窩實體”具有“已創建”或類似的列,但沒有 ,這將是微不足道的。

但是,在我的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM