这样一个三元的多对多关系该如何设计与映射?
例如下面3个实体类:
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做左连接,右连接才能查询出来?List roles;//用户Staff AIterator 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的角色查询了,如上面拆成一对多之后感觉好麻烦,我想不出怎样写才能更简便的查询出来