[英]Search for entities where list contains any value from list in java hibernate
[英]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.