关于hibernate中复合键的Where子句

时间:2014-12-17 14:26:36

标签: java hibernate composite-key

我想我错过了一些非常大的东西,但对我而言,休眠似乎非常有限。

我有下表(稍微简化):

USER_ID | USER | TARGET_ID | TARGET_USER |  EFFECT_DATE | REQUEST_NO | EXPIRY_DATE |
------------------------------------------------------------------------------------
a11     | jon  |   a22     |    steve    |  21/12/2014  |   555324   |  28/12/2014 |
a11     | jon  |   a33     |    jim      |  23/12/2014  |   555324   |  28/12/2014 |
a11     | jon  |   a44     |    bob      |  24/12/2014  |   555324   |  28/12/2014 |
a22     | steve|   a33     |    jim      |  24/12/2014  |   555324   |  28/12/2014 |

最大的问题是有3个复合键:

USER_ID,TARGET_ID和EFFECT_DATE

我意识到这不容易合作,但这是我给予的,所以我对桌子的设计没有多少控制。

我已使用hibernate使用以下复合键映射连接到我的数据库:

<composite-id name="actAsID">
        <key-property name="userID" column="PROXY_USER_ID" type = "string" />
        <key-property name="targetID" column="TARGET_USER_ID" type="string"/>
        <key-property name="effectDate" column="EFFCT_DATE" type="date" />
</composite-id>

这非常正常,我可以添加用户删除它们并搜索它们。在搜索用户时出现问题,似乎我必须提供用户ID,目标ID和生效日期的值,即每次只提取一行数据。这让我相信我只能得到一排,或者我可以得到所有看起来非常有限的东西。

我在这里有四个主要用例:

1)获取表格中的所有行 2)搜索USER_ID以向我提供具有该USER_ID的所有行 3)搜索TARGET_ID以向我提供具有该TARGET_ID的所有行 4)基于给定的USER_ID和TARGET_ID

进行搜索

我在映射文件中确实只有ID设置为USER_ID,但这只允许我获取所有用户或具有该USER_ID的所有行,即我不能在TARGET_ID上使用where子句。

1 个答案:

答案 0 :(得分:1)

我可以在Hibernate中使用HQL或Criteria。

例如,以下代码为我提供了USER_ID为A11的所有用户:

List<ProxyUser> Users = session.createCriteria(User.class)
             .add(Restrictions.eq("actAsID.userID", "11"))
             .list();

HQL的一些很好的例子:

http://www.journaldev.com/2954/hibernate-query-language-hql-example-tutorial

使用带有复合键的条件:

Hibernate : how to get records from composite key using Criteria Query