我想我错过了一些非常大的东西,但对我而言,休眠似乎非常有限。
我有下表(稍微简化):
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子句。
答案 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