2

Hibernateを使用してDB_TABLEの句クエリでSQLを実行する必要があります。in句には、値のペアが含まれています。以下を参照してください。コンポーネントマッピングの助けを借りて、(tid、mid)ペアをクエリするように機能しました。

次に、別のペアの例(tid、組織)に対してin句クエリを追加で実行する必要があります。どうすればよいですか?

ターゲットSQLクエリ

select * from DB_TABLE where ( c_tid, c_mid ) in ( ('t1', 'm1'), etc. )

Javaクエリコード

function List<DBTable> getDBTableList( List<TidMidId> tidMidList ) {
  Criterion crit = Restrictions.in( "tidMidId", tidMidList.toArray() );
  // pom is hibernate wrapper
  return pom.getObjects( DBTable.class, crit );
}

Hibernateマッピング:

<class name="com.DBTable" table="DB_TABLE" >
    <id name="id" type="long" column="K_ID">
        <generator class="sequence">
            <param name="sequence">DB_TABLE$SEQ</param>
        </generator>
    </id>

    <component name="tidMidId" class="com.TidMidId">
        <property name="tid" type="string" column="C_TID"/>
        <property name="mid" type="string" column="C_MID"/>
    </component>
    <property name="organisation" type="string" column="C_ORGANISATION"/>
    <property name="createTimestamp" type="timestamp" column="D_CREATE_TIMESTAMP"/>
    <property name="modTimestamp" type="timestamp" column="D_MOD_TIMESTAMP"/>
</class>
4

1 に答える 1

1

HQLを使ってみませんか?HibernateにSQLを処理させます。

Query q = session.createQuery("FROM com.DBTable x WHERE x.tidMidId.tid = ? AND x.tidMidId.mid = ?");
q.setString(0, "t1");
q.setString(1, "m1");
return (List<com.DBTable>) q.list();

パラメータの追加は次のように簡単です。

q = ".... AND x.organisation = ?");
q.setString(3, "someOrganization");
于 2012-12-20T18:40:04.287 に答える