簡體   English   中英

休眠:搜索在一組枚舉中包含值的實體

[英]Hibernate: search for entities that contains a value in a set of enums

我有一個類似於以下示例的實體:

@Entity
@Table(name = "AIRPLANE")
public class Airplane {

    @ElementCollection(targetClass = Color.class, fetch = FetchType.LAZY)
    @CollectionTable(name = "AIRPLANE_COLORS", joinColumns = @JoinColumn(name = "AIRPLANE_ID"))
    @Column(name = "AIRPLANE_COLOR")
    @ForeignKey(name = "FK_AIRPLANE_COLOR_ID")
    @Enumerated(EnumType.STRING)
    private Set<Color> colors;    
    ...
}
...
public enum Color {
    WHITE, RED, BLUE
}

顏色是一組枚舉,我想搜索所有包含此集合中紅色的實體。

我可以使用“條件”來做到這一點還是應該使用HQL查詢?

謝謝!

條件API可用於基於一組動態...條件創建查詢。 對於靜態查詢,HQL始終更具可讀性:

select a from Airplane a where :color member of a.colors

要么

select a from Airplane a join a.colors color where color = :color

應該可以

正如JB Nizet所建議的那樣,您可以使用HQL獲得結果:

        Query query = session.createQuery("from Airplane as airplane inner join "
                + "airplane.colors colors where colors =:color");
        query.setParameter("color", Color.BLUE);

        List<Airplane> list = query.list();
        for (Airplane airplane : list) {
            System.out.println("->" + airplane.getColors());
        }

在Hibernate中有一種使用Criteria進行查詢的方法。 您只需要加入colors並要求其elements屬性(即colors.elements )。

elements是Hibernate的CollectionPropertyNames類中定義的關鍵字,您可以使用它訪問您的枚舉值。

session.createCriteria(Airplane.class)
    .createAlias("colors", "colors")
    .add(Restrictions.eq("colors.elements", Color.BLUE))
    .list() 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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