hibernate一对一之独一外键关联(单向关联)

hibernate一对一之唯一外键关联(单向关联)

新新一个java项目,并新建javabean。如下:

 

TUser.java

package cn.ehoo.bean;
/**
 *@author whp
 *@Email whp@ehoo.cn
 *@Nov 8, 2011
 *
 */
public class TUser {
	private Long id;
	private String name;
	private Integer age;
	private Group group;
	public Group getGroup() {
		return group;
	}
	public void setGroup(Group group) {
		this.group = group;
	}
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	

}

 

Group.java

package cn.ehoo.bean;
/**
 *@author whp
 *@Email whp@ehoo.cn
 *@Nov 8, 2011
 *
 */
public class Group {
	private Long id;
	private String groupName;
	
	
	
	public Group(String groupName) {
		super();
		this.groupName = groupName;
	}
	public Group() {
	}
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getGroupName() {
		return groupName;
	}
	public void setGroupName(String groupName) {
		this.groupName = groupName;
	}
}

 

2 TUser与Group类的配置文件

 

TUser.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
	<class name="cn.ehoo.bean.TUser" table="t_user" >
		<id name="id" type="long">
			<generator class="native" />
		</id>
		<property name="name" />
		<property name="age"/>
		<many-to-one name="group" class="cn.ehoo.bean.Group" unique="true" column="group_id"/>
	</class>
</hibernate-mapping>

  

 

Group.hbm.xml

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
	<class name="cn.ehoo.bean.Group" table="group1"><!--这里不能把table名字命名为group,如果是group的话会出错-->
		<id name="id" type="long" column="group_id">
			<generator class="native" />
		</id>
		<property name="groupName"/>
	</class>
</hibernate-mapping>

  

3、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>

	<!-- Database connection settings -->
	<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
	<property name="connection.url">jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8</property>
	<property name="connection.username">root</property>
	<property name="connection.password">123</property>

	<!-- SQL dialect -->
	<property name="dialect">org.hibernate.dialect.MySQLDialect</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>
	<property name="hbm2ddl.auto">update</property>
	<mapping resource="cn/ehoo/bean/TUser.hbm.xml" />
	<mapping resource="cn/ehoo/bean/Group.hbm.xml" />
</session-factory>

</hibernate-configuration>

 

4、hibernate Util类

package en.choo.util;


import java.io.Serializable;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public final class HibernateUtil {
	private static SessionFactory sessionFactory;
	private static ThreadLocal session = new ThreadLocal();

	private HibernateUtil() {
	}

	static {
		try {
			Configuration cfg = new Configuration();
			cfg.configure();
			sessionFactory = cfg.buildSessionFactory();
		} catch (Exception e) {
			e.printStackTrace();
			// TODO: handle exception
		}
	}

	public static Session getThreadLocalSession() {
		Session s = (Session) session.get();
		if (s == null) {
			s = getSession();
			session.set(s);
		}
		return s;
	}

	public static void closeSession() {
		Session s = (Session) session.get();
		if (s != null) {
			s.close();
			session.set(null);
		}
	}

	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	public static Session getSession() {
		return sessionFactory.openSession();
	}

	public static void add(Object entity) {
		Session s = null;
		Transaction tx = null;
		try {
			s = HibernateUtil.getSession();
			tx = s.beginTransaction();
			s.save(entity);
			tx.commit();
		} finally {
			if (s != null)
				s.close();
		}
	}

	public static void update(Object entity) {
		Session s = null;
		Transaction tx = null;
		try {
			s = HibernateUtil.getSession();
			tx = s.beginTransaction();
			s.update(entity);
			tx.commit();
		} finally {
			if (s != null)
				s.close();
		}
	}

	public static void delete(Object entity) {
		Session s = null;
		Transaction tx = null;
		try {
			s = HibernateUtil.getSession();
			tx = s.beginTransaction();
			s.delete(entity);
			tx.commit();
		} finally {
			if (s != null)
				s.close();
		}
	}

	public static Object get(Class clazz, Serializable id) {

		Session s = null;
		try {
			s = HibernateUtil.getSession();
			Object obj = s.get(clazz, id);
			return obj;
		} finally {
			if (s != null)
				s.close();
		}
	}

	public static void main(String[] args) {
		Session session = null;
		session = getSession();
		System.out.println(session);
	}

}

 

 

 

5、hibernate相应的测试类

 

package cn.ehoo.test;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import cn.ehoo.bean.Group;
import cn.ehoo.bean.TUser;

import en.choo.util.HibernateUtil;

/**
 * @author whp
 * @Email whp@ehoo.cn
 * @Nov 8, 2011
 * 
 */
public class TUserTest {
	static Session session = null;
	static Transaction tr = null;

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		session = HibernateUtil.getSession();
		tr = session.beginTransaction();
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
		tr.commit();
	}

	@Test
	public static  void saveUser() {
		TUser user = new TUser();
		user.setAge(12);
		user.setName("Wang Haipeng");
		Group group = new Group("系统权限");
		user.setGroup(group);
		HibernateUtil.add(group);
		HibernateUtil.add(user);
	}
	
	
	public static void main(String[] args) {
		saveUser();
	}

}