ef mysql 外键 一对一_Hibernate 一对一唯一外键关联映射

package com.yx.zzg.pojo;

public class IdCard {

private int id;

private String cardNo;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getCardNo() {

return cardNo;

}

public void setCardNo(String cardNo) {

this.cardNo = cardNo;

}

}

package com.yx.zzg.pojo;

public class Person {

private int id;

private String name;

private IdCard idCard;

public IdCard getIdCard() {

return idCard;

}

public void setIdCard(IdCard idCard) {

this.idCard = idCard;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

二、编写实体类映射文件

/p>

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

/p>

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

三、编写hibernate配置文件

/p>

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

com.mysql.jdbc.Driver

jdbc:mysql://localhost/hibernate_one2one

root

123456

org.hibernate.dialect.MySQLDialect

true

true

四、编写测试类

package com.yx.zzg.test;

import junit.framework.TestCase;

import org.hibernate.HibernateException;

import org.hibernate.Session;

import org.hibernate.Transaction;

import com.yx.zzg.pojo.IdCard;

import com.yx.zzg.pojo.Person;

import com.yx.zzg.util.HibernateUtil;

public class TestUser extends TestCase {

public void testSave1() {

Session session = null;

Transaction tx = null;

try {

session = HibernateUtil.getSession();

tx = session.beginTransaction();

IdCard idCard = new IdCard();

idCard.setCardNo("8888888888888888888");

// 如果没有显示的保存idCard,则会抛出TransientObjectException异常,因为一对一唯一外键关联映射是多对一关联映射的特例

session.save(idCard);

Person person = new Person();

person.setName("zzg");

person.setIdCard(idCard);

session.save(person);

tx.commit();

} catch (HibernateException e) {

tx.rollback();

throw e;

} finally {

if (session != null) {

session.close();

}

}

}

public void testLoad1() {

Session session = null;

Transaction tx = null;

try {

session = HibernateUtil.getSession();

tx = session.beginTransaction();

Person p = (Person) session.load(Person.class, 1);

System.out.println("p.name=" + p.getName() + ";p.idCard.CardNo="

+ p.getIdCard().getCardNo());

tx.commit();

} catch (HibernateException e) {

throw e;

} finally {

if (session != null) {

session.close();

}

}

}

}

Hibernate 一对一唯一外键关联映射(双向)例子:

Hibernate 一对一唯一外键关联映射(双向)需要在另外一端添加标签,指示hibernate如何加载其关联对象,默认根据主键加载,而外键关联映射中,因为两个实体采用的是person的外键维护的关系,所以不能指定主键加载person,而要根据person的外键加载,所以采用如下映射方式:

因此我们要做如下修改:

1.修改IdCard实体类:

package com.yx.zzg.pojo;

public class IdCard {

private int id;

private String cardNo;

private Person person;

public Person getPerson() {

return person;

}

public void setPerson(Person person) {

this.person = person;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getCardNo() {

return cardNo;

}

public void setCardNo(String cardNo) {

this.cardNo = cardNo;

}

}

2.修改IdCard.hbm.xml文件

/p>

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2009-10-09 23:29

浏览 2189

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值