from MenuGroup mg
left join fetch mg.menuNodes mns
[color=red][b]join[/b][/color] mns.enterpriseDepartments eds
where mg.id=mns.menuGroup and eds.id = ?
from MenuGroup mg left join fetch mg.menuNodes mns 这句参见我的另外一个日志
多对多采用 [color=red][b]join(left join fetch)[/b][/color] ,并且不用id直连
实体关系如下(只写出关键的代码了,呵呵):
MenuGroup 与 MenuNode 一对多
MenuNode 与 EnterpriseDepartment 多对多(单向关系)
left join fetch mg.menuNodes mns
[color=red][b]join[/b][/color] mns.enterpriseDepartments eds
where mg.id=mns.menuGroup and eds.id = ?
from MenuGroup mg left join fetch mg.menuNodes mns 这句参见我的另外一个日志
多对多采用 [color=red][b]join(left join fetch)[/b][/color] ,并且不用id直连
实体关系如下(只写出关键的代码了,呵呵):
MenuGroup 与 MenuNode 一对多
MenuNode 与 EnterpriseDepartment 多对多(单向关系)
@Entity
@Table(name = "PERMISSION_MENU_GROUP")
public class MenuGroup implements AccessPermission,IntOrderable{
/**菜单所包含的菜单节点*/
private List<MenuNode> menuNodes = new ArrayList<MenuNode>();
@OneToMany(mappedBy="menuGroup")
@LazyCollection(LazyCollectionOption.FALSE)
public List<MenuNode> getMenuNodes() {
return menuNodes;
}
//略
}@Entity
@Table(name = "PERMISSION_MENU_NODE")
public class MenuNode implements AccessPermission,IntOrderable{
/**企业会员部门*/
private List<EnterpriseDept> enterpriseDepartments=new ArrayList<EnterpriseDept>();
/**菜单所在组*/
private MenuGroup menuGroup;
@ManyToMany
@JoinTable(
name = "PERMISSION_MENUNODE_ENTER_DEPT",
joinColumns = {
@JoinColumn(name = "MENU_NODE_ID")
},
inverseJoinColumns = {
@JoinColumn(name = "ENTERPRISE_DEPARTMENT_ID")
})
@LazyCollection(LazyCollectionOption.FALSE)
public List<EnterpriseDept> getEnterpriseDepartments() {
return enterpriseDepartments;
}
@ManyToOne
@JoinColumn(name = "MENU_GROUP_ID",nullable=false)
public MenuGroup getMenuGroup() {
return menuGroup;
}
//略
}@Entity
@Table(name = "ENTERPRISE_DEPT")
public class EnterpriseDept extends BasicDept{
//略
}
@MappedSuperclass
public abstract class BasicDept implements java.io.Serializable, ValueObject<BasicDept>,Identityable{
protected String id;
@Id
@Column(length = 32)
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
public String getId() {
return id;
}
//略
}
本文介绍了一种在实体关系映射中处理多对多关系的方法,通过使用join(left join fetch)来实现MenuGroup、MenuNode及EnterpriseDepartment之间的关联查询。具体展示了如何在Java实体类中定义这些关系,并给出了相应的HQL查询语句。
1380

被折叠的 条评论
为什么被折叠?



