Hibernate上路_15-多对多表单操作

使用多个POJO对一张表进行维护。某个POJO为主类,其它为从属。从属类成为组件。

1.主类和组件类:

Hibernate上路_15-多对多表单操作 

2.主类.hbm.xml配置:

<hibernate-mapping package="cn.cvu.hibernate.domain">
	<class name="PojoPerson" table="tb_person" select-before-update="true">
		<id name="id" column="t_id" type="int">
			<generator class="native" />
		</id>
		<property name="name" column="t_name" />
		
		<!-- 组件配置
		name="主类中配置的组件属性" --> 
		<component name="homeAddress" class="cn.cvu.hibernate.domain.PojoAddress">
			<!-- 组件类中配置的父类 -->
			<parent name="person"/>
			<!-- 组件类的一般属性 -->
			<property name="province" column="t_homeProvince"></property>
			<property name="city" column="t_homeCity"></property>
		</component>
  
		<!-- 有多个组件时,建议配置column,防止列名冲突 -->
		<component name="workAddress" class="cn.cvu.hibernate.domain.PojoAddress">
			<parent name="person"/>
			<property name="province" column="t_workProvince"></property>
			<property name="city" column="t_workCity"></property>
		</component>
	</class>
</hibernate-mapping>

3.操作:

1)插入:

public void test(){
		Session session = UtilGetSession.openSession();
		Transaction transaction = session.beginTransaction();
		
		PojoAddress homeAddress = new PojoAddress();
		homeAddress.setProvince("山东");
		homeAddress.setCity("淄博");
		
		PojoAddress workAddress = new PojoAddress();
		workAddress.setProvince("北京");
		workAddress.setCity("海淀区");
		
		PojoPerson person = new PojoPerson();
		person.setName("Eminem");
		person.setHomeAddress(homeAddress);  
		person.setWorkAddress(workAddress);  
		
		session.save(person);
		
		transaction.commit();
		session.close();
	}

Hibernate上路_15-多对多表单操作

2)查询:

public void test(){
		Session session = UtilGetSession.openSession();
		Transaction transaction = session.beginTransaction();
		
		PojoPerson person = (PojoPerson) session.get(PojoPerson.class, 2);
		System.out.println(person);
		System.out.println("家庭地址:" + person.getHomeAddress());
		System.out.println("办公地址:" + person.getWorkAddress());
		
		transaction.commit();
		session.close();
	}

Hibernate上路_15-多对多表单操作

3)更新:

应当考虑到空指针异常。

public void test(){
		Session session = UtilGetSession.openSession();
		Transaction transaction = session.beginTransaction();
		
		//持久化对象自动更新,不必通过session操作
		PojoPerson person = (PojoPerson) session.get(PojoPerson.class, 2);
		person.getHomeAddress().setCity("济南");
		
		transaction.commit();
		session.close();
	}

Hibernate上路_15-多对多表单操作

4)删除:

public void test(){
		Session session = UtilGetSession.openSession();
		Transaction transaction = session.beginTransaction();
		
		//持久化对象。或者new一个脱管对象。
		PojoPerson person = (PojoPerson) session.get(PojoPerson.class, 2);
		session.delete(person);
		
		transaction.commit();
		session.close();
	}


- end
  

你可能感兴趣的:(sql,Hibernate,jdbc,crud,数据持久化)