树状自关联 hibernate配置,查询
来源:互联网 发布:sql server msde win7 编辑:程序博客网 时间:2024/06/05 12:06
栏目实体
每个栏目有多个子栏目,一个父栏目
一级栏目无父栏目
hibernate配置
package com.france.bean;import java.util.HashSet;import java.util.Set;import javax.persistence.CascadeType;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.ManyToOne;import javax.persistence.OneToMany;import javax.persistence.OrderBy;import javax.persistence.Table;import org.hibernate.annotations.DynamicInsert;import org.hibernate.annotations.DynamicUpdate;@Entity@Table(name = "lanmu")@DynamicUpdate(true)@DynamicInsert(true)public class Lanmu implements java.io.Serializable { /** * 栏目 自关联一对多 */ private static final long serialVersionUID = 862821212669955478L; private Integer id; private String name; private String description; private Lanmu parentLanmu; private Integer level; private Set<Lanmu> children = new HashSet<Lanmu>(0); public Lanmu() { } @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "lanmu_id", unique = true, nullable = false) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "parentLanmu", nullable = true) public Lanmu getParentLanmu() { return parentLanmu; } public void setParentLanmu(Lanmu parentLanmu) { this.parentLanmu = parentLanmu; } public Integer getLevel() { return level; } public void setLevel(Integer level) { this.level = level; } @OneToMany(targetEntity=Lanmu.class, mappedBy="parentLanmu", cascade=CascadeType.ALL, fetch = FetchType.EAGER) @OrderBy("name") public Set<Lanmu> getChildren() { return children; } public void setChildren(Set<Lanmu> children) { this.children = children; }}
查询的时候 本来是参考
MySQL中进行树状所有子节点的查询
但是hibernate已经在对象映射做好了,所以直接根据id得到Lanu对象就可以
@Override public Lanmu findAllChildrenLanmu(int lanmu_id) { // TODO Auto-generated method stub Lanmu root=new Lanmu(); root=lanmuDAO.get(Lanmu.class, lanmu_id); return root; }
测试代码:
@Test public void testFindAllChildrenLanmu() { Lanmu root=service.findAllChildrenLanmu(1); System.out.println(root.getParentLanmu());//得到null System.out.println("get root ok"); Set<Lanmu> c1=root.getChildren(); Iterator iter=c1.iterator(); while(iter.hasNext()){ Lanmu l= (Lanmu)iter.next(); System.out.printf("lanmu_id:%d,lanmu_name:%s\n",l.getId(),l.getName()); } }
输出:
Hibernate: select lanmu0_.lanmu_id as lanmu_id1_7_0_, lanmu0_.description as descript2_7_0_, lanmu0_.level as level3_7_0_, lanmu0_.name as name4_7_0_, lanmu0_.parentLanmu as parentLa5_7_0_, children1_.parentLanmu as parentLa5_7_1_, children1_.lanmu_id as lanmu_id1_7_1_, children1_.lanmu_id as lanmu_id1_7_2_, children1_.description as descript2_7_2_, children1_.level as level3_7_2_, children1_.name as name4_7_2_, children1_.parentLanmu as parentLa5_7_2_ from lanmu lanmu0_ left outer join lanmu children1_ on lanmu0_.lanmu_id=children1_.parentLanmu where lanmu0_.lanmu_id=? order by children1_.name //得到二级栏目 一级栏目(1)和二级栏目节点(3,4)Hibernate: select children0_.parentLanmu as parentLa5_7_0_, children0_.lanmu_id as lanmu_id1_7_0_, children0_.lanmu_id as lanmu_id1_7_1_, children0_.description as descript2_7_1_, children0_.level as level3_7_1_, children0_.name as name4_7_1_, children0_.parentLanmu as parentLa5_7_1_ from lanmu children0_ where children0_.parentLanmu=? order by children0_.name //得到三级栏目节点(null)(children0_.parentLanmu=3)Hibernate: select children0_.parentLanmu as parentLa5_7_0_, children0_.lanmu_id as lanmu_id1_7_0_, children0_.lanmu_id as lanmu_id1_7_1_, children0_.description as descript2_7_1_, children0_.level as level3_7_1_, children0_.name as name4_7_1_, children0_.parentLanmu as parentLa5_7_1_ from lanmu children0_ where children0_.parentLanmu=? order by children0_.name //得到另一个三级栏目节点(5)(children0_.parentLanmu=4)Hibernate: select children0_.parentLanmu as parentLa5_7_0_, children0_.lanmu_id as lanmu_id1_7_0_, children0_.lanmu_id as lanmu_id1_7_1_, children0_.description as descript2_7_1_, children0_.level as level3_7_1_, children0_.name as name4_7_1_, children0_.parentLanmu as parentLa5_7_1_ from lanmu children0_ where children0_.parentLanmu=? order by children0_.name //得到四级栏目节点(null)(children0_.parentLanmu=5)nullget root oklanmu_id:3,lanmu_name:lanmuAAlanmu_id:4,lanmu_name:lanmuAB
数据库数据
最后,配置的时候注意fetch = FetchType.EAGER
的使用范围即可
0 0
- 树状自关联 hibernate配置,查询
- hibernate 树状自关联 *.hbm.xml 配置
- hibernate自关联配置
- hibernate Mysql 自增长 注解配置,表无关联的注解方式关联查询
- hibernate Mysql 自增长 注解配置,表无关联的注解方式关联查询
- hibernate Mysql 自增长 注解配置,表无关联的注解方式关联查询
- Hibernate自关联的配置与实现
- hibernate annotation 自关联(自联接)配置
- Hibernate自关联关系
- hibernate中的自关联
- Hibernate自关联
- sql自关联查询
- 表自关联查询
- sql自关联查询
- Hibernate中,自关联树状且不与主键(id)的实体类的设置
- hibernate 关联查询Ⅱ
- Hibernate 关联查询
- Hibernate Criteria 关联查询
- C# Linq 未将对象引用设置到对象的实例
- iOS面试题 集锦(2)
- 关于servlet中前台数据后台提取功能的一点心得
- springmvc注解开发
- BizTalk 2010 学习笔记
- 树状自关联 hibernate配置,查询
- 异常处理:java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector
- 安卓java代码中获取控件的高和宽(1)
- 第11周项目1-验证算法(3)中序线索化二叉树的算法验证
- Linux<十一> 硬盘与硬件管理
- 拯救我的windows10,安装centos7,导致windows10引导消失
- python random从集合中随机选择元素
- 10、内存管理⾼级
- Android Cursor(游标)