Hibernate 关联映射one-to-one

旧城等待, 2024-02-17 18:17 123阅读 0赞

一对一关联有两种实现方式:

(1)共享的主键关联,

(2)一对一的外键关联

1、共享的主键关联:让两个对象具有共同的主键值,以表明他们之间的一一对应关系。

Person.java类

  1. public class Person implements java.io.Serializable {
  2. // Fields
  3. private Integer id;
  4. private String name;
  5. private Idcard idcard;
  6. }

Idcard.java类

public class Idcard implements java.io.Serializable {

// Fields
private Integer id;
private String idcardno;
private Person person;
}

Person.hbm.xml

seq_sid


<one-to-one name=”idcard”

class=”com.db.entity.Idcard” cascade=”all” />

Idcard.hbm.xml

person




测试代码:

public static void main(String[] args) {
// TODO Auto-generated method stub

Session session=null;
session=HibernateSessionFactory.getSession();
session.beginTransaction();
//卡
Idcard idcard=new Idcard(“2345678901”);
//人
Person person=new Person(“Lily”);

//相互包含
person.setIdcard(idcard);
idcard.setPerson(person);

//添加人
session.save(person);

session.getTransaction().commit();

}

2、一对一的外键关联:**外键关联,本来是用于多对一的配置,**但是加上唯一的限制之后(采用标签来映射,指定多的一端unique为true,这样就限制了多的一端的多重性为一),也可以用来表示一对一关联关系,其实它就是多对一的特殊情况。

首先在表idcard中新添加一列pid用于共享数据

Person.java类

  1. public class Person implements java.io.Serializable {
  2. // Fields
  3. private Integer pid;
  4. private String name;
  5. private Idcard idcard;
  6. .......
  7. }

idcard.java类

public class Idcard implements java.io.Serializable {

// Fields
private Integer iid;
private String idcardno;
private Person person; ……}

Person.hbm.xml

  1. 1 <hibernate-mapping>
  2. 2 <class name="com.db.entity.Person" table="person">
  3. 3 <id name="pid" type="java.lang.Integer">
  4. 4 <column name="pid" />
  5. 5 <generator class="sequence" />
  6. 6 </id>
  7. 7 <property name="name" type="java.lang.String">
  8. 8 <column name="name" length="30" />
  9. 9 </property>
  10. 10 <one-to-one name="idcard" class="com.db.entity.Idcard" property-ref="person"/>
  11. 11 </class>
  12. 12 </hibernate-mapping>

Idcard.hbm.xml

  1. 1 <hibernate-mapping>
  2. 2 <class name="com.db.entity.Idcard" table="idcard">
  3. 3 <id name="iid" type="java.lang.Integer">
  4. 4 <generator class="sequence">
  5. 5 </generator>
  6. 6 </id>
  7. 7 <many-to-one name="person" column="pid" class="com.db.entity.Person"
  8. 8 cascade="save-update" unique="true"/>
  9. 9 <property name="idcardno" type="java.lang.String">
  10. 10 <column name="idcardno" length="20" />
  11. 11 </property>
  12. 12 </class>
  13. 13 </hibernate-mapping>

hibernate.cfg.xml文件和测试代码同上。

发表评论

表情:
评论列表 (有 0 条评论,123人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Hibernate--关联映射

           hibernate是持久层ORM框架,关系映射解决了对象型实体与关系型数据库不相匹配的问题,它是Hibernate的核心内容,在实际操作中我们必须要根据数据表的相