zoukankan      html  css  js  c++  java
  • hibernate 多对多注解配置

    1、在公司一个员工对应多个部门,一个部门对应多个员工,因此部门与员工之间就是多对多的关系。

    Person类的代码如下:

    package com.mr.cheng.bean;
    
    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.JoinTable;
    import javax.persistence.ManyToMany;
    import javax.persistence.ManyToOne;
    
    import org.hibernate.annotations.Cascade;
    
    @Entity
    public class Person {
    	private Integer id;
    	private String name;
    	private int age;
    	private double price;
    	private Set<Dept> depts;
    	/**
    	 * 多对多由一方来完成,
    	 */
    	@ManyToMany(cascade=CascadeType.ALL)
    	@JoinTable(name="personDeptTable",
    			/**
    			 * 这一方的Id
    			 */
    			joinColumns={@JoinColumn(name="personId")},
    			/**
    			 * 反转的另外一段的列名,既对方一张表的Id
    			 * @return
    			 */
    			inverseJoinColumns={@JoinColumn(name="deptId")}
    			 )
    	public Set<Dept> getDepts() {
    		return depts;
    	}
    	@Override
    	public String toString() {
    		return "Person [id=" + id + ", name=" + name + ", age=" + age
    				+ ", price=" + price + ", depts=" + depts + "]";
    	}
    	public void setDepts(Set<Dept> depts) {
    		this.depts = depts;
    	}
    	@Id
    	@GeneratedValue
    	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 int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	public double getPrice() {
    		return price;
    	}
    	public void setPrice(double price) {
    		this.price = price;
    	}
    }
    

      Dept类的代码如下:

    package com.mr.cheng.bean;
    
    import java.util.Set;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToMany;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="deptTable")
    public class Dept {
    	private int id;
    	private String name;
    	private Set<Person>persons;
    	@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;
    	}
    	@ManyToMany
    	(mappedBy="depts")
    	public Set<Person> getPersons() {
    		return persons;
    	}
    	public void setPersons(Set<Person> persons) {
    		this.persons = persons;
    	}
    }
    

    2、hibernate.hbm.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/test
    	</property>
    	<property name="connection.username">root</property>
    	<property name="connection.password">root</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>
    	<mapping class="com.mr.cheng.bean.Dept" />
    	<mapping class="com.mr.cheng.bean.Person" />
    
    </session-factory>
    
    </hibernate-configuration>
    

      

    3、测试代码如下:

    package com.mr.cheng.test;
    
    import java.util.Date;
    import java.util.HashSet;
    
    import org.hibernate.Query;
    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;
    
    import com.mr.cheng.bean.Dept;
    import com.mr.cheng.bean.Person;
    
    
    public class HibernateTest {
    	private static SessionFactory sessionFactory;
    	
    	//@BeforeClass
    	public static void beforeClass() {
    			sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
    	}
    	//@AfterClass
    	public static void afterClass() {
    		sessionFactory.close();
    	}
    	
    	
    	
    	@Test
    	public void testSchemaExport() {
    		new SchemaExport(new AnnotationConfiguration().configure()).create(true, true);
    	}
    	
    	public static void main(String[] args) {
    		beforeClass();
    	}
    	/**
    	 * 多对多单向
    	 */
    	@Test
    	public void testManyToManyAddPersonAndDept(){
    		new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
    		sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
    		Session session = sessionFactory.openSession();
    		session.beginTransaction();
    		Dept dept = new Dept();
    		dept.setName("财务部");
    		Dept dept1 = new Dept();
    		dept1.setName("财务部");
    		Person person = new Person();
    		person.setName("A111");
    		person.setAge(33);
    		person.setPrice(33);
    		Person person1 = new Person();
    		person1.setName("A111");
    		person1.setAge(33);
    		person1.setPrice(33);
    		person.setDepts(new HashSet<Dept>());
    		person1.setDepts(new HashSet<Dept>());
    		person.getDepts().add(dept);
    		person.getDepts().add(dept1);
    		
    		
    		person1.getDepts().add(dept);
    		person1.getDepts().add(dept1);
    		
    		session.save(person1);
    		session.save(person);
    		/*session.save(dept1);
    		session.save(dept);*/
    		session.getTransaction().commit();
    	}
    	/**
    	 * 多对多单向查询 Person 一方
    	 */
    	@Test
    	public void testManyToManyQueryPerson(){
    		new SchemaExport(new AnnotationConfiguration().configure()).create(false, false);
    		sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
    		Session session = sessionFactory.openSession();
    		session.beginTransaction();
    		Person p = (Person) session.load(Person.class, 1);
    		System.out.println(p.getDepts());
    		session.getTransaction().commit();
    	}
    	/**
    	 * 多对多单向查询 Dept 一方
    	 */
    	@Test
    	public void testManyToManyQueryDept(){
    		new SchemaExport(new AnnotationConfiguration().configure()).create(false, false);
    		sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
    		Session session = sessionFactory.openSession();
    		session.beginTransaction();
    		Dept dept = (Dept) session.load(Dept.class, 1);
    		System.out.println(dept.getPersons());
    		session.getTransaction().commit();
    	}
    	@Test
    	public void testManyToManyAddPersonAndDept1(){
    		sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
    		Session session = sessionFactory.openSession();
    		session.beginTransaction();
    		Dept dept = new Dept();
    		dept.setName("财务部");
    		Dept dept1 = new Dept();
    		dept1.setName("财务部");
    		Person person = new Person();
    		person.setName("A111");
    		person.setAge(33);
    		person.setPrice(33);
    		Person person1 = new Person();
    		person1.setName("A111");
    		person1.setAge(33);
    		person1.setPrice(33);
    		
    		dept1.setPersons(new HashSet());
    		dept.setPersons(new HashSet());
    		
    		dept1.getPersons().add(person1);
    		dept1.getPersons().add(person);
    		
    		
    	/*	session.save(person1);
    		session.save(person);*/
    		session.save(dept1);
    		session.save(dept);
    		session.getTransaction().commit();
    	}
    }
    

      

  • 相关阅读:
    spring的APO
    设计系统测试计划需要参考的项目文档有
    系统测试的策略
    软件测试包括
    简述你在以前的工作中做过哪些事情,比较熟悉什么
    在C/C++中static有什么用途?(请至少说明两种)
    引用与指针有什么区别?
    说说你对集成测试中自顶向下集成和自底向上集成两个策略的理解,要谈出它们各自的优缺点和主要适应于哪种类型测试;
    系统测试的策略
    通过画因果图来写测试用例的步骤为___、___、___、___及把因果图转换为状态图共五个步骤。 利用因果图生成测试用例的基本步骤是:
  • 原文地址:https://www.cnblogs.com/chengAddress/p/4365953.html
Copyright © 2011-2022 走看看