我是Hibernate的新手,还没有围绕一些可能的更复杂的查询。所以我有一个超级简单的数据库模式:
然后我有用户,列表和任务的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教程也可能不错)?
答案 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>