hibernate映射 一对一 级联关系

一对一:

eg:人和身份证的关系 Person /Card

实体类: ---1.主表和从表之分        ---2.从表中有主表的东西 ,主表中有从表的东西

映射文件:

主表  

<?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="com.zking.hibernate04_01.entity.Person" table="PERSON">
        <id name="pid" type="java.lang.String">
            <column name="PID" />
            <generator class="guid" />
        </id>
        <property name="pname" type="java.lang.String">
            <column name="PNAME" />
        </property>
        <one-to-one cascade="delete" name="card" class="com.zking.hibernate04_01.entity.Card"></one-to-one>
    </class>
</hibernate-mapping>

从表:

<?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="com.zking.hibernate04_01.entity.Card" table="CARD">
        <id name="pid" type="java.lang.String">
            <column name="pid" />
            <generator class="foreign" >
            <param name="property">person</param>
            </generator>
        </id>
        <property name="cno" type="java.lang.String">
            <column name="CNO" />
        </property>
        <property name="cid" type="java.lang.String">
            <column name="cid" />
        </property>
        <one-to-one  name="person" class="com.zking.hibernate04_01.entity.Person"></one-to-one>
    </class>
</hibernate-mapping>

数据库中主表的主键也是从表的主键 一对一  

CRUD:增加 修改 删除 设置级联关系  

级联关系:  

级联,就是对一个对象进行操作的时候,会把他相关联的对象也一并进行相应的操作.

建议使用:all-delete-orphan 或为(all,delete-orphan)版本不同 因为这个可以同时用于联表增删改.

hibernate 3已经将cascade当中的选项做了修改,现在已经没有了all-delete-orphan这个选项,虽然hibernate  
内部还是支持这个选项

写一个一对一增加和删除的例子:

package com.zking.hibernate04_01.action;

import org.hibernate.Session;
import org.junit.jupiter.api.Test;

import com.zking.hibernate04_01.entity.Card;
import com.zking.hibernate04_01.entity.Person;
import com.zking.hibernate04_01.sessionutils.SessionFactoryUtils;

public class TextAction {
	@Test
	public void text() {
		Session sessionutil = SessionFactoryUtils.openSession();
		Person p = new Person();
		Card c = new Card();
		String id="5fb31e68-b2a8-11e8-a9a5-208984958495";
		p.setPid(id);
		c.setPid(id);
		p.setPname("name4");
		c.setCno("KH-dewfref");
		c.setPerson(p);
		p.setCard(c);

		sessionutil.delete(p);
		//sessionutil.save(c);
		sessionutil.beginTransaction().commit();
		SessionFactoryUtils.myclose();

	}
}

删除需要传俩个id id传主键 但是传给不同的对象  

要多实践

猜你喜欢

转载自blog.csdn.net/qqqnzhky/article/details/82593746