HQL中的Collection.contains(Enum.Value)? [英] Collection.contains(Enum.Value) in HQL?

查看:359
本文介绍了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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆