Aft*_*ess 1 annotations hibernate filter one-to-many
我有一个非常简单的一对多关系,并希望使用in子句过滤多边(集合).我无法让过滤器工作.Hibernate都抱怨过滤器参数是未定义的(当使用Set或Integer作为类型时)或者说传入的值是错误的类型(当使用int参数类型时)
关系:类别有很多测试用例,测试用例只有一个类别
POJO#1
@Entity
@Table(name = "CATEGORY")
public class Category
{
@Id
@Column(name = "CATEGORYID")
private int ID;
@Column(name = "CATEGORYNAME")
private String name;
@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(name = "CATEGORYID")
@Filter(name = "TEST_RUN_ID_FILTER")
private Collection<SimpleTestCase> testCases;
}
Run Code Online (Sandbox Code Playgroud)
Pojo#2
@Entity
@Table(name = "TESTCASE_NEW")
@FilterDef(name = "TEST_RUN_ID_FILTER", defaultCondition = "TESTRUNID in (:IDS)", parameters = { @ParamDef(name = "IDS", type = "Integer") })
public class SimpleTestCase
{
@Id
@Column(name = "TESTCASEID")
private int ID;
@Column(name = "TESTCASENAME")
private String name;
@Column(name = "STATUS")
private String status;
@Column(name = "TESTRUNID")
private int testRunId;
}
Run Code Online (Sandbox Code Playgroud)
DAO
public List<Category> getAllCategoriesForTestRuns(Set<Integer> testRunIDs)
{
Session session = getSession();
session.enableFilter("TEST_RUN_ID_FILTER")
.setParameter("IDS", testRunIDs);
Query query = session.createQuery("FROM " + Category.class.getSimpleName());
List<Category> result = query.list();
return result;
}
Run Code Online (Sandbox Code Playgroud)
异常(当Set或Integer为param类型时):
Java.lang.IllegalArgumentException: Undefined filter parameter [IDS]
at org.hibernate.impl.FilterImpl.setParameter(FilterImpl.java:74)
Run Code Online (Sandbox Code Playgroud)
异常(当int是param类型时)
java.lang.IllegalArgumentException: Incorrect type for parameter [IDS]
at org.hibernate.impl.FilterImpl.setParameter(FilterImpl.java:77)
Run Code Online (Sandbox Code Playgroud)
FilterImpl.setParameter 只能处理奇异参数.
当涉及到传递集合或数组参数时,
使用 FilterImpl.setParameterList(name, values)
https://forum.hibernate.org/viewtopic.php?p=2410099
| 归档时间: |
|
| 查看次数: |
5553 次 |
| 最近记录: |