如何在JPA中使Hibernate Filters生效?

5

我有以下实体类:


@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和注释为我配置的。
非常感谢任何帮助。
谢谢。
1个回答

5

过滤器不会影响任何ID查找方式。这也是一对一和多对一关联不能被过滤的确切原因。


这似乎是我的问题,当我改变代码使用查询时,它就像个冠军一般运行。我并没有深入考虑过它(我对Hibernate筛选器还很陌生),但我想如果您已经拥有给定对象的ID,不过滤也许有某种程度的道理。感谢您为我纠正。 - Steve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接