您的位置:首页 > 其它

Hibernate 基于外键一对一映射(单双向)

2016-04-01 19:21 316 查看
主要内容

映射关联关系

一对一关联映射的策略

基于外键的单(双)一对一关联映射

基于主键的单(双)一对一关联映射

基于外键的单向一对一实际上是多对一关联映射的特例

采用<many-to-one>标签,指定多的一端的unique=true,这样就限制了多端的多重性为一

单向的表示只有一端知道有联系,知道的联系的为主控端。不知道联系的为被控端。

public class Account {

private Integer id;
private String name;

//主控端引用被控端的对象
private Address address;

public Account(){

}

/**
* @return the id
*/
public Integer getId() {
return id;
}

/**
* @param id the id to set
*/
public void setId(Integer id) {
this.id = id;
}

/**
* @return the name
*/
public String getName() {
return name;
}

/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}

/**
* @return the address
*/
public Address getAddress() {
return address;
}

/**
* @param address the address to set
*/
public void setAddress(Address address) {
this.address = address;
}

/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "Account [id=" + id + ", name=" + name
+ "]";
}

}


public class Address {

private int id;
private String address;

public Address(){

}

/**
* @return the id
*/
public int getId() {
return id;
}

/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}

/**
* @return the address
*/
public String getAddress() {
return address;
}

/**
* @param address the address to set
*/
public void setAddress(String address) {
this.address = address;
}

/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "Address [address=" + address + ", id=" + id + "]";
}

}


映射文件

<?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="Account" table="acc_table01">
<!-- 生成对象唯一的OID标示符 -->
<id name="id" column="id" type="integer">
<generator class="native"/>
</id>
<property name="name"/>
<!--
通过Many-to-One 添加唯一属性约束,建立一对一的关系
-->
<many-to-one name="address" column="address_id" unique="true"></many-to-one> <span style="color:#ff0000;">//这个是外键</span>
</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="Address" table="address_table01">
<!-- 生成对象唯一的OID标示符 -->
<id name="id" column="id" type="integer">
<generator class="native"/>
</id>
<property name="address"/>

</class>

</hibernate-mapping>






基于外键的双向一对一映射,两边都持有对象的引用

javabean如下:

public class Account {

private Integer id;
private String name;

//主控端引用被控端的对象

private Address address_id;

public Account(){

}

/**
* @return the id
*/
public Integer getId() {
return id;
}

/**
* @param id the id to set
*/
public void setId(Integer id) {
this.id = id;
}

/**
* @return the name
*/
public String getName() {
return name;
}

/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}

//	/**
//	 * @return the address
//	 */
//	public Address getAddress() {
//		return address;
//	}
//
//	/**
//	 * @param address the address to set
//	 */
//	public void setAddress(Address address) {
//		this.address = address;
//	}

/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "Account [id=" + id + ", name=" + name
+ "]";
}

/**
* @return the address_id
*/
public Address getAddress_id() {
return address_id;
}

/**
* @param addressId the address_id to set
*/
public void setAddress_id(Address addressId) {
address_id = addressId;
}

}


public class Address {

private int id;
private String address;

//声明一个对主控端对象的引用
private Account account;

public Address(){

}

/**
* @return the id
*/
public int getId() {
return id;
}

/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}

/**
* @return the address
*/
public String getAddress() {
return address;
}

/**
* @param address the address to set
*/
public void setAddress(String address) {
this.address = address;
}

/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "Address [address=" + address + ", id=" + id + "]";
}

public void setAccount(Account account) {
this.account = account;
}

public Account getAccount() {
return account;
}

}


映射文件:

<?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="Account" table="acc_table02">
<!-- 生成对象唯一的OID标示符 -->
<id name="id" column="id" type="integer">
<generator class="native"/>
</id>
<property name="name"/>
<!--
通过Many-to-One 添加唯一属性约束,建立一对一的关系
-->
<many-to-one name="address_id" column="address_id" unique="true"></many-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="Address" table="address_table02">
<!-- 生成对象唯一的OID标示符 -->
<id name="id" column="id" type="integer">
<generator class="native"/>
</id>
<property name="address"/>
<!-- one-to-one映射一对一关联     property-ref属性:指定反向属性引用 -->
<one-to-one name="account" property-ref="address_id"></one-to-one>

</class>

</hibernate-mapping>




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: