【问题标题】:How do I get Hibernate Filters to work in JPA?如何让 Hibernate 过滤器在 JPA 中工作?
【发布时间】:2012-06-04 16:01:54
【问题描述】:

我有以下实体类:


@Entity
@FilterDef (name = "byLastName", parameters = @Parameter (name = "lastName", type="string"))
@Filters ({
    @Filter (name = "byLastName", condition = "lastName = :lastName")
})
public class User {
    String firstName;
    String lastName;
}

在我的 DAO 中,我这样做:


public User findById (Long id)
{
   Session s = (Session) em.getDelegate ( );
   s.enableFilter ("byLastName").setParameter ("lastName", "smith");

   User u = em.find (User.class, id);
   return (u);
}

现在,如果我理解正确的话,应该应用过滤器,如果 lastName 不等于“smith”,我尝试检索的任何用户都应该返回为 null。问题是过滤器似乎没有被应用。无论 lastName 的值如何,我尝试从数据库中检索的任何用户都会返回。

我是否误解了过滤器的工作原理?还是我在如何配置方面遗漏了一些东西?请注意,我没有使用 hibernate.cfg.xml;一切都是使用 JPA 和注释为我配置的。

任何帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: hibernate hibernate-annotations


    【解决方案1】:

    过滤器不会影响任何形式的 id 查找。这也是无法过滤一对一和多对一关联的确切原因。

    【讨论】:

    • 这似乎是我的问题,当我将代码更改为使用查询时,它就像冠军一样工作。我并没有真正深入考虑过它(我对 Hibernate 过滤器真的很陌生),但我想当你已经有了给定对象的 ID 时不过滤是有一定意义的。谢谢你让我明白
    猜你喜欢
    • 2018-02-11
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多