• 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();
    	}
    }
    

      

      

  • 相关阅读:
    阿铭每日一题 day 1 20180111
    计算机网络之基础链路
    android学习笔记 对话框合集
    android 音乐播放器简单实现
    Service的生命周期&Service绑定方法
    android学习笔记 Service
    android学习笔记 activity生命周期&任务栈&activity启动模式
    android 短信助手demo
    android 显示意图
    java 多线程断点下载demo
  • 原文地址:https://www.cnblogs.com/wujixing/p/5424247.html
Copyright © 2020-2023  润新知