HQL中的Collection.contains(Enum.Value)? [英] Collection.contains(Enum.Value) in HQL?
本文介绍了HQL中的Collection.contains(Enum.Value)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我对在HQL中做某事有点困惑。
I'm a little confused about how to do something in HQL.
所以让我们说我有一个类Foo,我坚持在hibernate。它包含一组枚举值,如下所示:
So let's say I have a class Foo that I'm persisting in hibernate. It contains a set of enum values, like so:
public class Foo
{
@CollectionOfElements
private Set<Bar> barSet = new HashSet<Bar>();
//getters and setters here ...
}
和
public enum Bar
{
A,
B
}
有没有HQL语句我可以用来获取只有Foo实例谁barse包含Bar.B ?
Is there an HQL statement I can use to fetch only Foo instances who'se barSet containst Bar.B?
List foos = session.createQuery("from Foo as foo " +
"where foo.barSet.contains.Bar.B").list();
还是我卡住了所有Foo实例并在DAO级别过滤?
Or am I stuck fetching all Foo instances and filtering them out at the DAO level?
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 you can see how to map
您可以查看如何映射
这篇关于HQL中的Collection.contains(Enum.Value)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文