java - Hibernate advanced in 子句

标签 java hibernate

我需要在 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/

相关文章:

java - onClick 和 mouseClick 有什么区别?

java - 如何生成 0 到 9 之间的 1000 个随机数?

java - 热交换代理和 DCEVM 的 Jboss JVM 参数配置

java - 单击按钮时 Android 应用程序崩溃

java - 如何捕获 401,403 错误并响应成功 200

java - Hibernate @ManyToMany 仅使用所属表中的 FK 来删除连接表中的条目

java - 如何分离 Hibernate 对象的持久属性

java - 使用 CrudRepository 保存带有外键的实体对象

java - 一般而言,哪种 Java ORM 被认为是性能最高的?

java - 如何将 Json 字符串转换为 Java 对象?