我正在使用 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
来获取所有具有 Bar
且 group = 的
?这应该是一个安全约束。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/