zoukankan      html  css  js  c++  java
  • hibernate---树状映射

    总公司--分公司1, 分公司2

    分公司1: 分公司1下部门1, 分公司1下部门2

    分公司2:

    Org.java:

    package com.bjsxt.hibernate;
    
    import java.util.HashSet;
    import java.util.Set;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.OneToMany;
    
    @Entity
    public class Org {
    	private int id;
    	private String name;
    	private Set<Org> children = new HashSet<Org>();
    	private Org parent;
    	@Id
    	@GeneratedValue
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	@OneToMany(cascade=CascadeType.ALL, mappedBy="parent")
    	public Set<Org> getChildren() {
    		return children;
    	}
    	public void setChildren(Set<Org> children) {
    		this.children = children;
    	}
    	
    	@ManyToOne
    	@JoinColumn(name="parent_id")
    	public Org getParent() {
    		return parent;
    	}
    	public void setParent(Org parent) {
    		this.parent = parent;
    	}
    }
    

    hibernate.cfg.xml:

    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    
    <hibernate-configuration>
    
        <session-factory>
    
             
            <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="connection.url">jdbc:mysql://localhost/hibernate</property>
            <property name="connection.username">root</property>
            <property name="connection.password">linda0213</property>
            <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
           <!--
            <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
            <property name="connection.url">jdbc:oracle:thin:@localhost:1521:SXT</property>
            <property name="connection.username">scott</property>
            <property name="connection.password">tiger</property>
          	<property name="dialect">org.hibernate.dialect.OracleDialect</property>
           -->
    
            <!-- JDBC connection pool (use the built-in) -->
            <property name="connection.pool_size">1</property>
    
            
    
            <!-- Enable Hibernate's automatic session context management -->
            <property name="current_session_context_class">thread</property>
    
            <!-- Disable the second-level cache  -->
            <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
    
            <!-- Echo all executed SQL to stdout -->
            <property name="show_sql">true</property>
            <property name="format_sql">true</property>
    
            <!-- Drop and re-create the database schema on startup
            <property name="hbm2ddl.auto">update</property>
    		 -->
            <!--  
            
    		<mapping resource="com/bjsxt/hibernate/Group.hbm.xml"/>
    		 <mapping resource="com/bjsxt/hibernate/User.hbm.xml"/>
    		 -->
    		  <mapping class="com.bjsxt.hibernate.Org"/>
            
    		
        </session-factory>
    
    </hibernate-configuration>
    

    test:

    package com.bjsxt.hibernate;
    
    import java.util.Map;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.AnnotationConfiguration;
    import org.hibernate.tool.hbm2ddl.SchemaExport;
    import org.junit.AfterClass;
    import org.junit.BeforeClass;
    import org.junit.Test;
    
    public class HibernateTreeTest {
    	private static SessionFactory sessionFactory;
    	
    	@BeforeClass
    	public static void beforeClass() {
    		new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
    		sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
    	}
    	@AfterClass
    	public static void afterClass() {
    		sessionFactory.close();
    	}
    	
    	@Test
    	public void testSave() {
    		Org o = new Org();
    		o.setName("总公司");
    		Org o1 = new Org();
    		o1.setName("分公司1");
    		Org o2 = new Org();
    		o2.setName("分公司2");
    		Org o11 = new Org();
    		o11.setName("分公司1下部门1");
    		Org o12 = new Org();
    		o12.setName("分公司1下部门2");
    		
    		o.getChildren().add(o1);
    		o.getChildren().add(o2);
    		o1.getChildren().add(o11);
    		o1.getChildren().add(o12);
    		o11.setParent(o1);
    		o12.setParent(o1);
    		o1.setParent(o);
    		o2.setParent(o);
    				
    		
    		Session session = sessionFactory.openSession();
    		session.beginTransaction();
    		session.save(o);
    	
    		session.getTransaction().commit();
    		session.close();
    	}
    	@Test
    	public void testLoad() {
    		testSave();
    		Session session = sessionFactory.openSession();
    		session.beginTransaction();
    		Org o = (Org)session.load(Org.class, 1);
    		print(o, 0);
    		session.getTransaction().commit();
    		session.close();
    		
    	}
    	
    	private void print(Org o, int level) {
    		String preStr = "";
    		for(int i=0; i<level; i++) {
    			preStr += "----";
    		}
    		System.out.println(preStr + o.getName());
    		for(Org child : o.getChildren()) {
    			print(child, level+1);
    		}
    	}
    	@Test
    	public void testSchemaExport() {
    		new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
    	}
    	
    	
    	public static void main(String[] args) {
    		beforeClass();
    	}
    }
    

      

      

  • 相关阅读:
    LINQ分组排序后获取每组第一条记录
    String 中的Trim
    C# Switch优雅写法
    C# 输入指定日期获取当前年的第一天 、当前年的最后天、某月的第一天 、某月的最后一天
    快捷方式 ABP——切换MySQL数据库
    新建立git分支,之后将分支合并到master上
    C# Contains()、 == 和Equals() 比较
    使用TimeSpan 日期与时间拼接
    ActiveReports报表行号
    iOS基础(八)——最新更新方法,每天只提示一次
  • 原文地址:https://www.cnblogs.com/wujixing/p/5424247.html
Copyright © 2011-2022 走看看