在java中使用@Filter hibernate注释筛选集合
我有两个hibernate映射的实体A和B A有2个实体B的集合,我想根据B中的属性筛选每个集合(如下面的代码所示)在java中使用@Filter hibernate注释筛选集合,hibernate,Hibernate,我有两个hibernate映射的实体A和B A有2个实体B的集合,我想根据B中的属性筛选每个集合(如下面的代码所示) @FilterDefs() 甲级{ @OneToMany(mappedBy=“productType”,fetch=FetchType.LAZY,cascade=CascadeType.ALL) @过滤器(name=“something”,condition=“entityType=”SKU1') Set set1=新的HashSet(); @OneToMany(mappedBy
@FilterDefs()
甲级{
@OneToMany(mappedBy=“productType”,fetch=FetchType.LAZY,cascade=CascadeType.ALL)
@过滤器(name=“something”,condition=“entityType=”SKU1')
Set set1=新的HashSet();
@OneToMany(mappedBy=“productType”,fetch=FetchType.LAZY,cascade=CascadeType.ALL)
@过滤器(name=“something”,condition=“entityType=”SKU2')
Set set2=新的HashSet();
}
B类{
@多通(级联=级联类型.ALL)
私有产品类型;
@列(name=“实体类型”)
@枚举(EnumType.STRING)
私有实体类型实体类型;
}
编辑:
我正在启用我的DAO方法中建议的过滤器。然而,我得到了以下例外
org.hibernate.exception.sqlgrammareexception:无法初始化
收藏
如果我使用渴望加载方法,我将得到一个异常,以处理生成的无效SQL
有指针吗?必须在DAO中启用过滤器
session.enableFilter("something");
在检索对象之前。我在实体中使用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{
}
如果是这种情况,请输入参数:
session.getEnabledFilter(filterName).setParameter(nameParameter,value);
正如您所建议的,我在我的DAO中启用了过滤器,但得到了以下异常:org.hibernate.HibernateException:没有配置这样的过滤器[something]。。我是否需要创建FilterDef或将条目放在其他位置?请检查您的筛选器定义,特别是检查类型。您应该使用基本类型,如字符串、整数、长字符串和。。。如果您需要列表作为参数值发送,这一点很重要;您应该使用setParameterList()而不是setParameter()。是否可以添加更多堆栈跟踪?
session.enableFilter("filterName")
session.getEnabledFilter(filterName).setParameter(nameParameter,value);