一对一:
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传主键 但是传给不同的对象
要多实践