java - 将 @Filter 与 @ManyToOne 关系一起使用

标签 java hibernate many-to-one hibernate-filters

我正在使用 Hibernate 3.6.7-Final 和 Spring 3.0.5。

我有这样的实体

@Entity
public class Foo {
    @ManyToOne
    private Bar bar;
}

@Entity
public class Bar {
    @Column
    String group;
}

如何在 Foo 中使用 @Filter 来获取所有具有 Bargroup = 的 Foo :组?这应该是一个安全约束。

尝试在Foo的属性bar处设置@Filter(name = "groupFilter", condition = "group = :group") > 但没有成功。 hibernate 是否支持此功能或 Filter 仅在实体/集合级别工作?我是否必须更改所有 HQL 才能添加此安全约束?

最佳答案

首先,您必须在某处创建@FilterDef(这定义了可用参数和默认条件),然后在特定类上定义@Filter。

最后,必须在 session 对象上启用过滤器,并设置它所需的任何参数。默认情况下, hibernate session 中不启用过滤器。 session 打开后,您必须启用您想要的特定功能。

请参阅第 19.1 节的示例:http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/filters.html

@FilterDef(name="groupFilter", parameters={@ParamDef( name="group", type="string" )})
@Filters(
  { @Filter(name="groupFilter", condition="group = :group") }
)
public class ... {
}

然后在你的 dao 代码中的某个地方:

session.enableFilter("groupFilter").setParameter("group", group);

您不必接触任何 hql。当您启用过滤器时,所有为其定义了实际@Filter 的类将自动应用该条件。

还有其他方法可以对集合进行操作,我建议您阅读上面引用的文档。但一般来说,您可以在类和集合属性上提供 @Filter 注释。

关于java - 将 @Filter 与 @ManyToOne 关系一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10691527/

相关文章:

java - 当有两个用@Qualifier定义的候选者时,Spring如何决定注入(inject)哪个bean?

java - hibernate "where"查询仅适用于 id 字段

java - hibernate以主键作为外键的双向关联

php - Doctrine ORM ManyToOne Inverse 不起作用

php - Symfony/Doctrine 2 ManyToOne关系,ORM不保留列的设置值,发生错误

java - 从 JSP 调用 Java 类中的 Main 方法

java - 数组填充为 'null' - LibGDX

java - 将整数数据加密到数据库中

java - 无法转换 HibernateTemplate.findByCriteria(criteria) 的 List<Object> 返回类型

java - 在 Generic DAO 中使用 Hibernate 调用存储过程的最佳方式是什么?