如何在hibernate中查询@MapKeyJoinColumn

时间:2013-11-12 09:55:53

标签: hibernate map jpa-2.0 hql

我的Resources实体有一个属性:

@ElementCollection(fetch = FetchType.LAZY)
@CollectionTable(name = "CMS_RESOURCE_USER_PERMISSION", joinColumns = @JoinColumn(name = "RESOURCE_ID", referencedColumnName = "ID"))
@MapKeyJoinColumn(name = "USER_ID", nullable = false)
@Enumerated(EnumType.STRING)
@Column(name = "PERMISSION", length = 50, nullable = false)
protected Map<User, ResourcePermission> userPermissions = new HashMap<User, ResourcePermission>();

现在我想获得用户资源,我该怎么做?有什么建议吗? 谢谢高级。

1 个答案:

答案 0 :(得分:1)

JPQL具有用于处理Maps的key(),entry()和value()运算符。毫无疑问,如果你使用的话,Criteria API会有类似的东西。

查看documnetation的第11.3.5.1节:

http://docs.jboss.org/hibernate/core/4.1/devguide/en-US/html/ch11.html

似乎你想要之类的东西(我还没试过):

"from resources r join r.userPermissions p where key(p) = ?1";

虽然看到以下在4.1.4 +中修复报告的Hibernate问题:

https://hibernate.atlassian.net/browse/HHH-5396