Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中使用@Filter hibernate注释筛选集合_Hibernate - Fatal编程技术网

在java中使用@Filter hibernate注释筛选集合

在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

我有两个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=“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);