Hibernate上路_13-一对一表单操作

当一张表中的字段太多,需要拆分为两张表,使用一对一表单关联。

1.外键关联: 

在任意一方添加对方主键作为外键列。

1POJO类:

Hibernate上路_13-一对一表单操作 

2POJO.hbm.xml

1<!-- PojoCompany.hbm.xml --> 

<hibernate-mapping package="cn.cvu.hibernate.domain">
	<class name="PojoCompany" table="tb_company" select-before-update="true">
		<id name="id" column="t_id" type="int">
			<generator class="native" />
		</id>
		<property name="name" column="t_name" />

		<!-- 一对一配置
			name=公司类中的地址属性名
			class=地址属性对应的地址类全路径
			column=配置一个外键列,关联地址表的主键
			unique=唯一的,true 
		-->
		<many-to-one name="address" 
    class="cn.cvu.hibernate.domain.PojoAddress" column="t_address_id" 
    unique="true" />
	</class>
</hibernate-mapping>


2<!-- PojoAddress.hbm.xml -->  

<hibernate-mapping package="cn.cvu.hibernate.domain">
	<class name="PojoAddress" table="tb_address" select-before-update="true">
			<id name="id" column="t_id" type="int">
				<generator class="native"></generator>
			</id>
			<property name="info" column="t_info"></property>
			
			<!-- 一对一配置
				name=关联的公司属性名
				class=公司类全路径
				property-ref=地址类在公司类中对应的属性名
			-->
			<one-to-one name="company" 
  class="cn.cvu.hibernate.domain.PojoCompany" 
  property-ref="address"/>
	</class>
</hibernate-mapping>


3hibernate.cfg.xml

Hibernate上路_13-一对一表单操作

4)操作:

1)成功操作:

public void insert() {
		Session session = UtilGetSession.openSession();
		Transaction transaction = session.beginTransaction();

		//创建用户
		PojoCompany company = new PojoCompany();
		company.setName("Pixar");	//皮克斯
		
		//创建订单1
		PojoAddress address = new PojoAddress();
		address.setInfo("加州北部爱莫利维尔市"); 
		
		//配置关联
		company.setAddress(address);
		address.setCompany(company);
		
		//保存全部相关数据
		session.save(company);
		session.save(address);
		
		transaction.commit();
		session.close();
	}


2TransientObjectException:

>1.仅操作主类-公司: 


>2.报出异常: 

org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: cn.cvu.hibernate.domain.PojoAddress 

>3.在主类中配置级联: 

Hibernate上路_13-一对一表单操作

>4. 当再次仅操作主类,会自动同时操作外联类。

2.主键关联:

两表的主键相同。

1POJO.hbm.xml配置:

1)主表配置one-to-one 

Hibernate上路_13-一对一表单操作

2)从表配置主键生成策略和关联:

Hibernate上路_13-一对一表单操作

2)操作从表:

此时仅操作从表,即可自动同时保存主表!

Hibernate上路_13-一对一表单操作

- end

你可能感兴趣的:(sql,Hibernate,jdbc,数据持久化,表单关联)