`

HQL o->m & m<-->n

阅读更多
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;
    }

    //略
}

分享到:
评论

相关推荐

    hibernate培训ppt

    课程强调了在设计时避免对展现层的直接依赖,并通过实例说明了对象-关系数据库的匹配问题,如对象的属性与表的列、1:1、1:n、n:m关系的映射,以及继承关系的处理。同时,提到了对象-关系不匹配的问题,如粒度、子...

    Hibernate 培训.pdf

    - 对象之间的关系(如 1:n 或 n:m)通过外键或关联表实现。 - 继承关系可以通过单表继承、具体表继承或类表继承等方式实现。 #### 三、Hibernate 核心接口 ##### 3.1 核心接口图 Hibernate 提供了一组核心接口,...

    欧拉法解常微分方程.doc

    例如,给定的MATLAB脚本文件“hql.m”中,定义了初始条件,步长,时间范围,然后通过循环计算每个时间步上的函数值。 对于显式欧拉法,脚本中的关键部分是计算 \( f \) 和 \( g \) 的新值,这些值分别来自微分方程...

    hibernat培训资料PPT

    匹配方式包括基本类型、1:1、1:n、n:1关系、n:m关系的映射,以及类的继承映射。此外,还讨论了对象-关系数据库的不匹配问题,如粒度、子类型、同一性、关联和对象结构导航的问题,及其带来的额外工作量和JDBC API的...

    hibernate入门PPT

    在Java中,例如`User`类与数据库中的`tbl_user`表进行映射,通过属性对应列,关系映射如1:1,1:n,n:m等。此外,还需要处理粒度、子类型、同一性、关联和对象结构导航等问题,这些问题可能导致额外的代码复杂性和...

    hibernat培训.ppt

    例如,一个User类与数据库的tbl_user表相对应,通过对象的属性与表的列进行映射,同时处理类与表之间的1:1、1:n、n:m关系,以及继承关系。O/R Mapping面临的挑战包括粒度不匹配、子类型问题、同一性问题、关联问题和...

    hibernate培训

    例如,Java类`User`与数据库表`tbl_user`之间的映射,类的属性对应表的列,1:1、1:n或n:m的关系可以通过外键或关联表来实现。此外,还有对象-关系不匹配的问题,如粒度差异、子类型处理、同一性问题、关联处理和对象...

    Hibernate3 学习笔记.ppt

    通过元数据(如XML或注解),开发者可以定义对象类和数据库表之间的映射关系,包括基本类型的字段对应表的列,类的属性与表的外键,以及1:1、1:n、n:m的关联关系和继承结构。 【二、Hibernate入门】 Hibernate是一...

    HIbernate 教程 资料 培训 学习

    private List&lt;Address&gt; address; // getters and setters } ``` **四、持久化对象的状态和生命周期** Hibernate管理的对象有四种状态:瞬时态、持久态、托管态和脱管态。理解这些状态对于有效地操作对象至关重要...

Global site tag (gtag.js) - Google Analytics