我有两个休眠映射实体A和B.
A有2个实体B的集合,我想根据B中保存的属性过滤每个集合(如下面的代码所示).
@FilterDefs()
class A{
@OneToMany(mappedBy = "productType", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@Filter(name = "something", condition = "entityType = 'SKU1'")
Set<B> set1 = new HashSet<B>();
@OneToMany(mappedBy = "productType", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@Filter(name = "something", condition = "entityType = 'SKU2'")
Set<B> set2 = new HashSet<B>();
}
class B{
@ManyToOne(cascade = CascadeType.ALL)
private A productType;
@Column(name = "entity_type")
@Enumerated(EnumType.STRING)
private EntityType entityType;
}
Run Code Online (Sandbox Code Playgroud)
编辑:我正在我的DAO方法中启用下面建议的过滤器.但是,我收到以下异常
org.hibernate.exception.SQLGrammarException:无法初始化集合
如果我使用急切的加载方法,我得到一个例外,无法生成无效的SQL?
有什么指针吗?
我在实体中使用FilterDef,然后在我想要使用过滤器的集合中设置.在你的例子中:
class A{
@OneToMany(...)
@Filter(name = "filterName")
Set<B> set2 = new HashSet<B>();
}
@FilterDef(name = "filterName",
defaultCondition = condition,
parameters = {@ParamDef(name = nameParameter,
type = typeParameter)})
class B{
}
Run Code Online (Sandbox Code Playgroud)
然后,ssedano说你应该在会话中启用过滤器:
session.enableFilter("filterName")
Run Code Online (Sandbox Code Playgroud)
如果是这样的话,请加上参数:
session.getEnabledFilter(filterName).setParameter(nameParameter,value);
Run Code Online (Sandbox Code Playgroud)
您必须在 DAO 中启用过滤器。
session.enableFilter("something");
Run Code Online (Sandbox Code Playgroud)
在取回物品之前。
| 归档时间: |
|
| 查看次数: |
12773 次 |
| 最近记录: |