1

非常に単純な 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)
4

1 に答える 1

9

FilterImpl.setParameter特異なパラメータのみを処理できます。

コレクションまたは配列パラメータを渡す場合、

使用するFilterImpl.setParameterList(name, values)

https://forum.hibernate.org/viewtopic.php?p=2410099

于 2013-03-19T06:24:48.280 に答える