Hibernate_8_Person和IdCard實例_一對一關係:基於外鍵

1)建立Person類:

public class Person {

	private Integer id;
	private String name;
	private IdCard IdCard;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public IdCard getIdCard() {
		return IdCard;
	}

	public void setIdCard(IdCard card) {
		this.IdCard = card;
	}

	@Override
	public String toString() {
		return "Person [id=" + id + ",name=" + name + "]";
	}
}

2)建立IdCard類:

	public class IdCard {

	private Integer id;
	private String number;
	private Person person;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getNumber() {
		return number;
	}

	public void setNumber(String number) {
		this.number = number;
	}

	public Person getPerson() {
		return person;
	}

	public void setPerson(Person person) {
		this.person = person;
	}

	@Override
	public String toString() {
		return "IdCard [id=" + id + ",number=" + number + "]";
	}
}

3)建立持久化類:

public class perAndIdDao {
	/**
	 * save方法
	 */
	@Test
	public void testSave() {
		Session session = SessionFactoryTools.getSession();
		Transaction tx = null;
		try {
			tx = session.beginTransaction();

			// ===============================================

			// 新建兩個Person對象
			Person person1 = new Person();
			person1.setName("張三");
			Person person2 = new Person();
			person2.setName("李四");

			// 新建兩個IdCard對象
			IdCard idCard1 = new IdCard();
			idCard1.setNumber("37292501");
			IdCard idCard2 = new IdCard();
			idCard2.setNumber("37292502");

			// 添加關聯對象
			person1.setIdCard(idCard1);
			person2.setIdCard(idCard2);
			idCard1.setPerson(person1);
			idCard2.setPerson(person2);

			// 保存
			session.save(person1);
			session.save(person2);
			session.save(idCard1);
			session.save(idCard2);

			// ===============================================
			tx.commit();
		} catch (RuntimeException e) {
			if (tx != null) {
				tx.rollback();
			}
			throw e;
		} finally {
			session.close();
		}

	}

	/**
	 * getById方法
	 */
	@Test
	public void testGetById() {
		Session session = SessionFactoryTools.getSession();
		Transaction tx = null;
		try {
			tx = session.beginTransaction();

			// ===============================================

			// 獲取person隊象並打印改隊象的信息和相關聯的idCard信息
			Person person = (Person) session.get(Person.class, 1);
			System.out.println(person + ":");
			System.out.println(person.getIdCard());

			// 獲取idCard對象並打印改隊象的信息和相關聯的person信息
			IdCard idCard = (IdCard) session.get(IdCard.class, 2);
			System.out.println(idCard + ":");
			System.out.println(idCard.getPerson());

			// ===============================================
			tx.commit();
		} catch (RuntimeException e) {
			if (tx != null) {
				tx.rollback();
			}
			throw e;
		} finally {
			session.close();
		}

	}

	/**
	 * 解除關聯關係的方法
	 */
	@Test
	public void testRemoveRelation() {
		Session session = SessionFactoryTools.getSession();
		Transaction tx = null;
		try {
			tx = session.beginTransaction();

			// ===============================================

			/**
			 * 獲取person對象並將其關聯的IdCard設置爲空 在多對一中,
			 * 由於一方不具有外鍵管理權,所以解除外鍵關聯是不能實現的
			 * Person person = (Person) session.get(Person.class, 1);
			 * person.setIdCard(null);
			 */

			/**
			 * 獲取idCard對象並將其相關聯的person設置爲空 在多對一中,
			 * 由於多方具有外鍵的管理權限,所以該外鍵的解除是可以實現的
			 */
			IdCard idCard = (IdCard) session.get(IdCard.class, 1);
			idCard.setPerson(null);

			// ===============================================
			tx.commit();
		} catch (RuntimeException e) {
			if (tx != null) {
				tx.rollback();
			}
			throw e;
		} finally {
			session.close();
		}
	}

	/**
	 * 刪除隊象的方法
	 */
	@Test
	public void testDelete() {
		Session session = SessionFactoryTools.getSession();
		Transaction tx = null;
		try {
			tx = session.beginTransaction();

			// ===============================================

			/**
			 * 獲取person對象並刪除該對象
			 * 在多對一中,由於一方不具有外鍵的管理權限,
  	 			所以刪除該對象是不可能實現的
			 * Person person = (Person) session.get(Person.class, 1); 
			 * session.delete(person);
			 */
			
			/**
			 * 獲取idCard對象並刪除該對象
			 * 在多對一中,由於多方具有外鍵愛你的管理權限,
                         * 所以刪除該對象是可以實現的
			 */
			IdCard idCard = (IdCard) session.get(IdCard.class, 1);
			session.delete(idCard);

			// ===============================================
			tx.commit();
		} catch (RuntimeException e) {
			if (tx != null) {
				tx.rollback();
			}
			throw e;
		} finally {
			session.close();
		}
	}
}

4)Person.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 package="map_3">
	<!--類名:Person 
		類對應的表名:person 
		一對一對應類:IdCard
		一對一對應的表:idCard
		一對一所對應的外鍵的屬性名:person
	-->
	<class name="Person" table="person">

		<id name="id" type="int" column="id">
			<generator class="native" />
		</id>
		<property name="name" type="string" column="name" length="20" />

	<one-to-one name="idCard" class="IdCard" property-ref="person">
</one-to-one>

	</class>
</hibernate-mapping>
 

5)IdCard.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 package="map_3">
	<!--類名:IdCard 
		類對應的表名:idCard
		多對一對應類的表名:person
		多對一對應的類名:Person
		多對一對應的列名:personId
		設置爲一對一關係:unique="true"
	-->
	<class name="IdCard" table="idCard">

		<id name="id" type="int" column="id">
			<generator class="native" />
		</id>
		<property name="number" type="string" column="number" />
<many-to-one name="person" class="Person" column="personId" 		unique="true">
</many-to-one>
	
	</class>
</hibernate-mapping>

6) 主文件的配置:

<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<session-factory name="foo">

		<!-- 配置數據庫信息 -->
		<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
		<property name="connection.url">
jdbc:mysql:///hibernate0
</property>
		<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
		<property name="connection.username">root</property>
		<property name="hibernate.connection.password">root</property>

		<!-- 其他配置 -->
		<property name="hibernate.show_sql">false</property>
		<property name="hibernate.format_sql">false</property>
		<property name="hbm2ddl.auto">update</property>

		<!-- 映射文件配置 -->
		<mapping resource="map_3/Person.hbm.xml" />
		<mapping resource="map_3/IdCard.hbm.xml" />

	</session-factory>
</hibernate-configuration>












發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章