Hibernate關聯映射之-單向多對一關聯(無連接表)

單向多對一關聯是非常常見的關聯關係,單向的N-1關聯只需從N的一端可以訪問1的一端

編寫持久化類District和Street類,及相應的映射文件

public class District implements java.io.Serializable{
	private Integer id;
	private String name;
	public District(){
		
	}
	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;
	}
}

District類的映射文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" >

<hibernate-mapping>
	<class name="org.jbit.pojo.District" table="district">
		<id name="id" type="java.lang.Integer">
			<column name="id"/>
			<generator class="sequence">
				<param name="sequence">DISTRICT_SEQUENCE</param>
			</generator>
		</id>
		<property name="name" type="java.lang.String">
			<column name="name" length="50" not-null="true"/>
		</property>
	</class>
</hibernate-mapping>

Street類

package org.jbit.pojo;

public class Street {
	private Integer id;
	private District district;
	private String name;
	public Street(){
		
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public District getDistrict() {
		return district;
	}
	public void setDistrict(District district) {
		this.district = district;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}


Street類映射文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" >

<hibernate-mapping>
	<class name="org.jbit.pojo.Street" table="street">
		<id name="id" type="java.lang.Integer">
			<column name="id"/>
			<generator class="sequence">
				<param name="sequence">STREET_SEQUENCE</param>
			</generator>
		</id>
		<property name="name" type="java.lang.String">
			<column name="name" length="50" not-null="true"/>
		</property>
		<many-to-one name="district" class="org.jbit.pojo.District">
			<column name="district_id" not-null="true"/>
		</many-to-one>
		
		
		
	</class>
</hibernate-mapping>


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">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

<session-factory>
	<!-- 數據庫URL -->
	<property name="connection.url">jdbc:oracle:thin:@localhost:1521:SJBITDB</property>
	<!-- 數據庫用戶 -->
	<property name="connection.username">epet</property>
	<!-- 數據庫用戶密碼 -->
	<property name="connection.password">jbit</property>
	<!-- 數據庫JDBC驅動 -->
	<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
	<!-- 每個數據庫都有其對應的Dialect以匹配其平臺特性 -->
	<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
	<!-- 指定當前session範圍和上下文 -->
	<property name="current_session_context_class">thread</property>
	<!-- 是否將運行期生成的SQL輸出到日誌以供調試 -->
	<property name="show_sql">true</property>
	<property name="hbm2ddl.auto">update</property>
	<mapping resource="org/jbit/pojo/District.hbm.xml"/>
	<mapping resource="org/jbit/pojo/Street.hbm.xml"/>

</session-factory>

</hibernate-configuration>

測試類Test

package org.jbit.test;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.jbit.pojo.District;
import org.jbit.pojo.Street;

public class Test {
	public static void main(String[] args) {
		District district = new District();
		Street street1 = new Street();
		Street street2 = new Street();
		Street street3 = new Street();
		district.setName("福田區");
		street1.setName("景田路");
		street1.setDistrict(district);
		street2.setName("福華路");
		street2.setDistrict(district);
		street3.setName("新洲路");
		street3.setDistrict(district);
		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction transaction = null;
		try {
			sessionFactory = new Configuration().configure().buildSessionFactory();
			session = sessionFactory.openSession();
			transaction = session.beginTransaction();
			session.save(district);
			session.save(street1);
			session.save(street2);
			session.save(street3);
			transaction.commit();
		} catch (HibernateException e) {
			// TODO: handle exception
			transaction.rollback();
			e.printStackTrace();
		} finally{
			if(null!=session){
				session.close();
			}
			if(null!=sessionFactory){
				sessionFactory.close();
			}
		}
		
	}
}




 

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