如何让Hibernate Filters在JPA中工作?

时间:2012-06-04 16:01:54

标签: hibernate hibernate-annotations

我有以下实体类:


@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 个答案:

答案 0 :(得分:5)

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