【问题标题】:Hibernate Query API - criteria on property of a key in mapHibernate Query API - 地图中键的属性标准
【发布时间】:2011-11-06 15:26:42
【问题描述】:

假设我有这样的模型:

public class ProjectModel {
        ...
        private Map<UserModel, ProjectUserRelations> usersRelations = new HashMap<UserModel, ProjectUserRelations>();
}

像这样在 hbm 中映射:

...
<map name="usersRelations" cascade="save-update" table="PROJECT_MEMBERS">
    <key column="project_id" />
    <map-key-many-to-many column="user_id" class="UserModel"/>
    <many-to-many column="properties_id" class="ProjectUserRelations"/>
</map>
...

如何使用 Hibernate Criteria 列出已给定用户的项目? 我试过这个:

标准 hbCriteria = session.createCriteria(ProjectModel.class);

if(criteria.getUserId() != null) {
    hbCriteria.createCriteria("usersRelations").add(Restrictions.eq("userId", criteria.getUserId()));
}

当然是映射用户:

<class name="UserModel"
    table="USER">
    <id name="objectId" column="objectId" type="java.lang.Long">
</class>

当使用当前实现时获取:

org.hibernate.QueryException: could not resolve property: usersRelations.objectId of: ProjectModel

任何帮助表示赞赏。

【问题讨论】:

    标签: java hibernate3


    【解决方案1】:

    我不确定您正在尝试做什么(在映射的关键属性上设置一个标准,该标准被建模为多对多)是否可以使用休眠标准 API 来实现。

    你试过了吗:

    hbCriteria.createCriteria("usersRelations").add(Restrictions.eq("userModel.userId", criteria.getUserId()));
    

    ?

    【讨论】:

    • 不,您的建议是为地图的 value 属性设置标准,我想为地图 key 的属性设置标准
    • 我认为 UserModel 是您地图中的关键?您想查找所有具有特定 UserModel 的用户关系,对吗?
    • 是的,完全正确。但是您所写的是“usersRelations”中名为“userModel”的属性的标准 - 在值中。至少这是我复制粘贴时hibernate在异常中所说的。我没有理由不相信他:)
    猜你喜欢
    • 2012-01-05
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 2012-03-12
    • 2014-12-16
    • 2013-12-22
    • 2013-08-05
    • 1970-01-01
    相关资源
    最近更新 更多