from MenuGroup mg
left join fetch mg.menuNodes mns
join mns.enterpriseDepartments eds
where mg.id=mns.menuGroup and eds.id = ?
from MenuGroup mg left join fetch mg.menuNodes mns 这句参见我的另外一个日志
多对多采用
join(left join fetch) ,并且不用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;
}
//略
}
分享到:
相关推荐
课程强调了在设计时避免对展现层的直接依赖,并通过实例说明了对象-关系数据库的匹配问题,如对象的属性与表的列、1:1、1:n、n:m关系的映射,以及继承关系的处理。同时,提到了对象-关系不匹配的问题,如粒度、子...
- 对象之间的关系(如 1:n 或 n:m)通过外键或关联表实现。 - 继承关系可以通过单表继承、具体表继承或类表继承等方式实现。 #### 三、Hibernate 核心接口 ##### 3.1 核心接口图 Hibernate 提供了一组核心接口,...
例如,给定的MATLAB脚本文件“hql.m”中,定义了初始条件,步长,时间范围,然后通过循环计算每个时间步上的函数值。 对于显式欧拉法,脚本中的关键部分是计算 \( f \) 和 \( g \) 的新值,这些值分别来自微分方程...
匹配方式包括基本类型、1:1、1:n、n:1关系、n:m关系的映射,以及类的继承映射。此外,还讨论了对象-关系数据库的不匹配问题,如粒度、子类型、同一性、关联和对象结构导航的问题,及其带来的额外工作量和JDBC API的...
在Java中,例如`User`类与数据库中的`tbl_user`表进行映射,通过属性对应列,关系映射如1:1,1:n,n:m等。此外,还需要处理粒度、子类型、同一性、关联和对象结构导航等问题,这些问题可能导致额外的代码复杂性和...
例如,一个User类与数据库的tbl_user表相对应,通过对象的属性与表的列进行映射,同时处理类与表之间的1:1、1:n、n:m关系,以及继承关系。O/R Mapping面临的挑战包括粒度不匹配、子类型问题、同一性问题、关联问题和...
例如,Java类`User`与数据库表`tbl_user`之间的映射,类的属性对应表的列,1:1、1:n或n:m的关系可以通过外键或关联表来实现。此外,还有对象-关系不匹配的问题,如粒度差异、子类型处理、同一性问题、关联处理和对象...
通过元数据(如XML或注解),开发者可以定义对象类和数据库表之间的映射关系,包括基本类型的字段对应表的列,类的属性与表的外键,以及1:1、1:n、n:m的关联关系和继承结构。 【二、Hibernate入门】 Hibernate是一...
private List<Address> address; // getters and setters } ``` **四、持久化对象的状态和生命周期** Hibernate管理的对象有四种状态:瞬时态、持久态、托管态和脱管态。理解这些状态对于有效地操作对象至关重要...