非常に単純な 1 対多の関係があり、in 句を使用して多側 (コレクション) をフィルター処理したいと考えています。フィルターが機能しません。Hibernate がフィルターパラメーターが未定義であると不平を言うか (タイプとして Set または Integer を使用する場合)、渡された値が間違ったタイプであると言う (パラメータータイプとして int を使用する場合)。
関係: カテゴリには多くのテスト ケースがあり、テスト ケースにはカテゴリが 1 つしかありません
ポジョ#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;
}
ポジョ #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;
}
ダオ
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;
}
例外 (Set または Integer が param 型の場合):
Java.lang.IllegalArgumentException: Undefined filter parameter [IDS]
at org.hibernate.impl.FilterImpl.setParameter(FilterImpl.java:74)
例外(intがparam型の場合)
java.lang.IllegalArgumentException: Incorrect type for parameter [IDS]
at org.hibernate.impl.FilterImpl.setParameter(FilterImpl.java:77)