我需要在 hibernate 状态下对 DB_TABLE 执行 SQL in 子句查询。 in 子句包含成对的值。我在组件映射的帮助下查询 (tid, mid) 对,如下所示。
我现在需要为另一个配对示例(tid、organization)另外执行一个 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>
最佳答案
你为什么不用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");
关于java - Hibernate advanced in 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13976154/