我有實體。 用戶,項目和角色。 用戶可以分配給多個具有某些角色的項目。 用戶GEORGE可以PROJECT-B對PROJECT-A和MANAGER作用ADMIN作用。如何使用雙向關聯映射這些實體。休眠多協會問題
*關係可以用以下方式描述。
用戶可以通過角色擁有許多項目。
的角色可以被分配到0以上的項目爲特定用戶。*
是否有可能與JOIN-TABLE。
我有實體。 用戶,項目和角色。 用戶可以分配給多個具有某些角色的項目。 用戶GEORGE可以PROJECT-B對PROJECT-A和MANAGER作用ADMIN作用。如何使用雙向關聯映射這些實體。休眠多協會問題
*關係可以用以下方式描述。
用戶可以通過角色擁有許多項目。
的角色可以被分配到0以上的項目爲特定用戶。*
是否有可能與JOIN-TABLE。
你需要引入第四實體,(我們稱之爲Right
),其說明特定用戶在特定項目上具有特定角色。因此,您將結束與以下關聯:
權的單位將被映射到表有三個外鍵(用戶,角色和項目),並且元組(userId, projectId, roleId)
應該是唯一的。
你需要使用專用的查詢(或Java方法)來找到用戶的角色爲一個項目:
public class User {
// ...
public Set<Role> getRolesForProject(Project project) {
Set<Role> result = new HashSet<Role>();
for (Right right : rights) {
if (right.getProject().equals(project)) {
result.add(right.getRole());
}
}
return result;
}
}
,或者在HQL:
select role from Right right
inner join right.role role
where right.user = :user
and right.project = :project
如果用戶在一個項目中不能擁有多個角色,只需將@ManyToOne Projects映射到您的用戶,並讓角色關係駐留在您的Project類中。
class User {
@OneToMany (mappedBy = "projects")
List<Project> projects;
[...]
}
class Project {
@ManyToOne
User user;
Role userRole;
[...]
}
這不但是忽視的可能性有多個用戶分配到一個項目,你沒有狀態,但我相信應該是一種可能性。
只需在Google或您最喜愛的搜索引擎上查找Hibernate Annotations雙向(BI-WINNING!)。
真的不細講這裏,看到OP只有29%的接受率..
歡呼
謝謝你..多個用戶可以分配給一個項目。 – Anand 2011-03-22 11:05:04
期待更多的表結構解釋.. – Anand 2011-03-22 11:06:06