java - HQL 中的 Collection.contains(Enum.Value)?

标签 java hibernate hql collections

我对如何在 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/

相关文章:

java - 为什么实体对象在方法返回后会被分离? ( Spring 数据JPA)

hibernate - org.hibernate.hql.ast.QuerySyntaxException : Unable to locate appropriate constructor

java - 使用 Java 将数组输入组织到表中?

java - 将 Hibernate 升级到 5.1.0 后如何导出模式?

java - Hibernate,强制从数据库获取对象

java - 将 Java 构造函数与 Hibernate 查询结合使用

mysql - SqlResultSetMapping native SQL 查询和 One2Many 关系

java - 与查询不服务相关的最佳和最全面的 SOAP 库是什么

java - 使两个操作原子化

java - 无法执行目标 org.apache.maven.plugins :maven-compiler-plugin:3. 8.1