hbernate学习(三)一对一双向关联

一对一映射:

    1)主键关联。一对一默认使用的是立即加载,如果需要使用延迟加载,那么需要在one-to-one元素中将constrained属性设置为true,并且将待加载一方的class元素中lazy设置为true(或者不去设置,因为该属性的默认值是true)。一对一加载默认使用左外连接,可以通过修改fetch属性为select修改成迷城发送一条select语句的形式。

     实例:

Student.java

package com.hibernate.one2one;

public class Student {
	private int stuId;
	private String stuName;
	private CardId cardId;
	public int getStuId() {
		return stuId;
	}
	public void setStuId(int stuId) {
		this.stuId = stuId;
	}
	public String getStuName() {
		return stuName;
	}
	public void setStuName(String stuName) {
		this.stuName = stuName;
	}
	public CardId getCardId() {
		return cardId;
	}
	public void setCardId(CardId cardId) {
		this.cardId = cardId;
	}
}


 

CardId.java

package com.hibernate.one2one;

public class CardId {
	private int cardId;
	private String carNumber;
	private Student student;
	public int getCardId() {
		return cardId;
	}
	public void setCardId(int cardId) {
		this.cardId = cardId;
	}
	public String getCarNumber() {
		return carNumber;
	}
	public void setCarNumber(String carNumber) {
		this.carNumber = carNumber;
	}
	public Student getStudent() {
		return student;
	}
	public void setStudent(Student student) {
		this.student = student;
	}
	
}


 

Student.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!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.hibernate.one2one.Student">
    		<id name="stuId" column="stuid">
    			<generator class="increment"></generator>
    		</id>
    		<property name="stuName" column="stuName" type="string"></property>
    		<one-to-one name="cardId" class="com.hibernate.one2one.CardId" cascade="all" fetch="select"></one-to-one>
    	</class>
    </hibernate-mapping>


 

CardId.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!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.hibernate.one2one.CardId" table="tb_card">
    		<id name="cardId" column="cardId">
    			<generator class="foreign">
    				<param name="property">student</param>
    			</generator>
    		</id>
    		<property name="carNumber" type="string"></property>
    		<one-to-one name="student" class="com.hibernate.one2one.Student" fetch="select"></one-to-one>
    	</class>
    </hibernate-mapping>


 

hibernae.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
	<hibernate-configuration>
<session-factory>
	<property name="connection.url">jdbc:mysql://localhost:3306/test</property>
	<property name="connection.username">root</property>
	<property name="connection.password">253503125</property>
	<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
	<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
	<property name="show_sql">true</property>
	<mapping resource="com/hibernate/one2one/CardId.hbm.xml"/>
	<mapping resource="com/hibernate/one2one/Student.hbm.xml"/>
</session-factory>
</hibernate-configuration>


 

 

 

    2)外键关联。本质上是一对多的退化形式。在many-to-one元素中增加unique=“true”属性就变成一对一。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值