hibernat 多对一注解配置

1、实体类关系,一个公司对应多个,即多个Person对应一个Company。以下是多对一外键注解关联,

  Person类代码如下:

package com.mr.cheng.entity;

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 org.hibernate.annotations.Cascade;

@Entity
public class Person {
	private Integer id;
	private String name;
	private int age;
	private double price;
	/**
	 * 单项
	 * 多对一配置 外键 
	 * cascade 是否保存一方
	 * fetch 是否立即查询一的一方
	 */
	
	private Company company;
	/**
	 * 注意在类中注解要么在字段上,要么在getter方法上,不能一个在getter上另外一个在字段上,
	 * @return
	 */
	@ManyToOne(cascade = CascadeType.ALL,fetch=FetchType.EAGER)
	public Company getCompany() {
		return company;
	}
	public void setCompany(Company company) {
		this.company = company;
	}
	@Id
	@GeneratedValue
	public Integer getId() {
		return id;
	}
	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", age=" + age
				+ ", price=" + price + ", company=" + company + "]";
	}
	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;
	}
}

  company实体类代码如下:

package com.mr.cheng.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Company {
	@Override
	public String toString() {
		return "Company [id=" + id + ", name=" + name + "]";
	}
	private int id;
	private String name;
	@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;
	}
}

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.entity.Company" />
<mapping class="com.mr.cheng.entity.Person" />

</session-factory>

</hibernate-configuration>

3、测试类代码如下:

package com.mr.cheng.test;

import java.util.Date;

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.entity.Company;
import com.mr.cheng.entity.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(false, true);
	}
	
	public static void main(String[] args) {
		beforeClass();
	}
	/**
	 * 单向多对一
	 * 两边手动保存,
	 */
	@Test
	public void testAddPersonAndCompany(){
		sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
		Session session = sessionFactory.getCurrentSession();
		session.beginTransaction();
		Company company = new Company();
		company.setName("rtl11");
		Person p1 = new Person();
		p1.setAge(33);
		p1.setName("user1");
		p1.setPrice(33.3);
		p1.setCompany(company);
		
		Person p2 = new Person();
		p2.setAge(33);
		p2.setName("user1");
		p2.setPrice(33.3);
		p2.setCompany(company);
		
		session.save(company);
		
		session.save(p1);
		session.save(p2);
		session.getTransaction().commit();
	}
	/**
	 * 单向保存
	 */
	@Test
	public void addPerson(){
		sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
		Session session = sessionFactory.getCurrentSession();
		session.beginTransaction();
		Company company = (Company) session.load(Company.class, 1);
		Person p1 = new Person();
		p1.setAge(33);
		p1.setName("user4");
		p1.setPrice(33.3);
		p1.setCompany(company);
		
		Person p2 = new Person();
		p2.setAge(33);
		p2.setName("user4");
		p2.setPrice(33.3);
		p2.setCompany(company);
		
		
		session.save(p1);
		session.save(p2);
		session.getTransaction().commit();
	}
	@Test
	public void queryPerson(){
		sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
		Session session = sessionFactory.getCurrentSession();
		session.beginTransaction();
		Person p = (Person) session.get(Person.class, 2);
		if(p != null){
			System.out.println(p.getName());
			System.out.println(p.getCompany());
		}
		
		session.getTransaction().commit();
	}

}

  

posted @ 2015-03-25 14:06  通往酱油的路上  阅读(178)  评论(0编辑  收藏  举报