从Hibernate中的链接表中获取数据

时间:2014-01-19 22:22:21

标签: java hibernate hql

我是Hibernate的新手,还没有围绕一些可能的更复杂的查询。所以我有一个超级简单的数据库模式: Database Schema

然后我有用户,列表和任务的Hibernate映射,如下所示:

用户:

<hibernate-mapping>
    <class name="com.brennydoogles.User" table="user">
        <id name="userID" column="UserID"/>
        <property name="userName" column="UserName"/>
        <property name="password" column="Password"/>
        <property name="emailAddress" column="EmailAddress"/>
        <set name="todoLists" table="userhaslist" lazy="false">
            <key column="UserID"/>
            <many-to-many column="ListID" class="com.brennydoogles.TodoList"/>
        </set>
    </class>
</hibernate-mapping>

列表:

<hibernate-mapping>
    <class name="com.brennydoogles.TodoList" table="list">
        <id name="listID" column="ListID"/>
        <property name="title" column="Title"/>
        <property name="description" column="Description"/>
        <set name="tasks" table="TASKINLIST" lazy="false">
            <key column="ListID"/>
            <many-to-many column="TaskID" class="com.brennydoogles.Task"/>
        </set>
    </class>
</hibernate-mapping>

任务:

<hibernate-mapping>
    <class name="com.brennydoogles.Task" table="task">
        <id name="taskID" column="TaskID"/>
        <property name="title" column="Title"/>
        <property name="description" column="Description"/>
    </class>
</hibernate-mapping>

这使我可以非常简单地获取一个用户(包含所有列表和任务)或一个List(包含所有任务)。我现在要做的是查找有权访问特定列表的所有用户的列表。我似乎无法弄清楚如何做到这一点,我想知道我是否可能有一些链接表缺少配置。

有没有人对如何做到这一点有任何建议(好的hibernate教程也可能不错)?

1 个答案:

答案 0 :(得分:0)

您无法按照自己的方式设置实体。

请注意User引用了一个或多个TodoLists,但TodoList没有任何映射回User的属性。你需要定义另一个属性,然后你可以做你想做的事。

直观地说,你有(-->表示“可以通过财产访问”):

User --> TodoList

你想:

User <--> TodoList

TodoList中的属性映射看起来像这样(抱歉,如果它不是100%准确,我使用注释与Hibernate):

    <set name="usersWithAccess" table="userhaslist" lazy="false">
        <key column="ListId"/>
        <many-to-many column="UserId" class="com.brennydoogles.User"/>
    </set>