浏览 2811 次
锁定老帖子 主题:这样一个三元的多对多关系该如何设计与映射?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-08-08
public class Role { private Long id; private String name; } public class Category { private Long id; private String name; private Category p_category; } public class Staff { private Long id; private String name; } Staff与Category多对多,Staff与Role也是多对多 画了一个ER图(不知道怎样直接能贴出来,只好放附件),不知道这样的设计是否合理? 我是这么想的:把上面3个实体间的联系类authority实体化,把多对多都转换成一对多,即: Staff,Category,Role分别与Authority一对多 public class Authority { private Long id; private Category category; private Staff manager; private Role role; private Integer status;//0/1,状态是否有效 } 这样通过Authority就能清楚知道谁被授予什么管理员身份(角色)去管理哪个分类, 但是我开始转不过弯了,多对多里,可以直接staff.roles,staff.categories,把多对多拆成与中间表Authority一对多之后,我该怎么才能通过staff查询出对应的roles呢?是不是得自己写SQL做左连接,右连接才能查询出来? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-08-13
ruby有一个关系叫作 (多态)表
他的中间表Authority只有四个字段 id =>主键 staff_id =>用户对应id Authority_id =>其它业务对应的id(role_id,Category_id) Authority_type =>对应的表的名子。 那么就可以通过Authority表找到一一对应的关系表了。 |
|
返回顶楼 | |
发表时间:2007-08-14
假如Authority表是这样一个结构(id,staff_id,role_id,category_id,status),要查用户A被授予的角色(一个用户可以同时分别被授予多个不同的角色去管理多个分类),使用关联查询时,我只能想到这么写(假设中间表Authority已经实体化,并分别与Role,Category,Staff建立一对多关联):
List roles; //用户Staff A Iterator authoritys=A.authoritys.iterator(); if(authoritys.hasNext()){ Authority auth=(Authority)authoritys.next() roles.add(auth.role); } 如果分别使用many-to-many来对Role,Category,Staff三实体进行关联(不实体化联系Authority),直接A.roles就实现用户A的角色查询了,如上面拆成一对多之后感觉好麻烦,我想不出怎样写才能更简便的查询出来 |
|
返回顶楼 | |