我对如何在 HQL 中做某事有点困惑。
假设我有一个 Foo 类,我坚持 hibernate 。它包含一组枚举值,如下所示:
public class Foo
{
@CollectionOfElements
private Set<Bar> barSet = new HashSet<Bar>();
//getters and setters here ...
}
和
public enum Bar
{
A,
B
}
是否有一个 HQL 语句我可以用来只获取 barSet 包含 Bar.B 的 Foo 实例?
List foos = session.createQuery("from Foo as foo " +
"where foo.barSet.contains.Bar.B").list();
或者我是否一直在获取所有 Foo 实例并在 DAO 级别过滤掉它们?
List foos = session.createQuery("from Foo as foo").list();
List results = new ArrayList();
for(Foo f : foos)
{
if(f.barSet.contains(Bar.B))
results.add(f);
}
谢谢!
最佳答案
你应该映射如下
@CollectionOfElements
@Enumerated(EnumType.STRING)
@JoinTable(
name="BAR_TABLE",
joinColumns=@JoinColumn(name="FOO_ID")
)
public Set<Bar> getBarSet() {
return this.BarSet;
}
你的 HQL 看起来像
select distinc Foo _foo inner join fetch _foo.barSet bar where bar = :selectedBar
query.setParameter("selectedBar", Bar.A);
query.list();
Here你可以看到如何映射
问候,
关于java - HQL 中的 Collection.contains(Enum.Value)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2403121/