hibernate3 one-to-one总结之主外键关联

在hibernate3中,one-to-one关联主要通过3种方式来实现:

(1)共享的关联主键

(2)主外键关联

(3)通过关联表关联

其中,第一和第二中关联很常见,第三种关联因为效率关系很少使用。

下面是主外键关联简单的例子:

Sql代码 复制代码
  1. create table person (   
  2.  person_id bigint primary key,   
  3.  name varchar(255) not null,   
  4.  address_id bigint,   
  5.  passport_id bigint,   
  6.  unique(address_id),   
  7.  unique(passport_id),   
  8.  foreign key (address_id) references address(address_id),   
  9.  foreign key (passport_id) references passport(passport_id)   
  10. );   
  11.   
  12. create table address(   
  13.  address_id bigint primary key,   
  14.  country varchar(255),   
  15.  city varchar(255),   
  16.  street varchar(255)   
  17. );   
  18.   
  19. create table passport (   
  20.  passport_id bigint primary key,   
  21.  num varchar(255)   
  22. );  
create table person (
 person_id bigint primary key,
 name varchar(255) not null,
 address_id bigint,
 passport_id bigint,
 unique(address_id),
 unique(passport_id),
 foreign key (address_id) references address(address_id),
 foreign key (passport_id) references passport(passport_id)
);

create table address(
 address_id bigint primary key,
 country varchar(255),
 city varchar(255),
 street varchar(255)
);

create table passport (
 passport_id bigint primary key,
 num varchar(255)
);

 

Java代码 复制代码
  1. package domain;   
  2.   
  3. import java.io.Serializable;   
  4.   
  5. public class Person implements Serializable {   
  6.        
  7.     private Long id;   
  8.     private String name;   
  9.     private Address address;   
  10.     private Passport passport;   
  11.        
  12.     public Long getId() {   
  13.         return id;   
  14.     }   
  15.     public void setId(Long id) {   
  16.         this.id = id;   
  17.     }   
  18.     public String getName() {   
  19.         return name;   
  20.     }   
  21.     public void setName(String name) {   
  22.         this.name = name;   
  23.     }   
  24.     public Address getAddress() {   
  25.         return address;   
  26.     }   
  27.     public void setAddress(Address address) {   
  28.         this.address = address;   
  29.     }   
  30.     public Passport getPassport() {   
  31.         return passport;   
  32.     }   
  33.     public void setPassport(Passport passport) {   
  34.         this.passport = passport;   
  35.     }   
  36. }  
package domain;

import java.io.Serializable;

public class Person implements Serializable {
	
	private Long id;
	private String name;
	private Address address;
	private Passport passport;
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Address getAddress() {
		return address;
	}
	public void setAddress(Address address) {
		this.address = address;
	}
	public Passport getPassport() {
		return passport;
	}
	public void setPassport(Passport passport) {
		this.passport = passport;
	}
}

 

Java代码 复制代码
  1. package domain;   
  2.   
  3. import java.io.Serializable;   
  4.   
  5. public class Address implements Serializable {   
  6.     private Long id;   
  7.     private String country;   
  8.     private String city;   
  9.     private String street;   
  10.     private Person person;   
  11.        
  12.     public Long getId() {   
  13.         return id;   
  14.     }   
  15.     public void setId(Long id) {   
  16.         this.id = id;   
  17.     }   
  18.     public String getCountry() {   
  19.         return country;   
  20.     }   
  21.     public void setCountry(String country) {   
  22.         this.country = country;   
  23.     }   
  24.     public String getCity() {   
  25.         return city;   
  26.     }   
  27.     public void setCity(String city) {   
  28.         this.city = city;   
  29.     }   
  30.     public String getStreet() {   
  31.         return street;   
  32.     }   
  33.     public void setStreet(String street) {   
  34.         this.street = street;   
  35.     }   
  36.     public Person getPerson() {   
  37.         return person;   
  38.     }   
  39.     public void setPerson(Person person) {   
  40.         this.person = person;   
  41.     }   
  42. }  
package domain;

import java.io.Serializable;

public class Address implements Serializable {
	private Long id;
	private String country;
	private String city;
	private String street;
	private Person person;
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getCountry() {
		return country;
	}
	public void setCountry(String country) {
		this.country = country;
	}
	public String getCity() {
		return city;
	}
	public void setCity(String city) {
		this.city = city;
	}
	public String getStreet() {
		return street;
	}
	public void setStreet(String street) {
		this.street = street;
	}
	public Person getPerson() {
		return person;
	}
	public void setPerson(Person person) {
		this.person = person;
	}
}

 

Java代码 复制代码
  1. package domain;   
  2.   
  3. import java.io.Serializable;   
  4.   
  5. public class Passport implements Serializable {   
  6.        
  7.     private Long id;   
  8.     private String num;   
  9.     private Person person;   
  10.        
  11.     public Long getId() {   
  12.         return id;   
  13.     }   
  14.     public void setId(Long id) {   
  15.         this.id = id;   
  16.     }   
  17.     public String getNum() {   
  18.         return num;   
  19.     }   
  20.     public void setNum(String num) {   
  21.         this.num = num;   
  22.     }   
  23.     public Person getPerson() {   
  24.         return person;   
  25.     }   
  26.     public void setPerson(Person person) {   
  27.         this.person = person;   
  28.     }   
  29. }  
package domain;

import java.io.Serializable;

public class Passport implements Serializable {
	
	private Long id;
	private String num;
	private Person person;
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getNum() {
		return num;
	}
	public void setNum(String num) {
		this.num = num;
	}
	public Person getPerson() {
		return person;
	}
	public void setPerson(Person person) {
		this.person = person;
	}
}

 

Xml代码 复制代码
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3. "-//Hibernate/Hibernate Mapping DTD//EN"   
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5. <hibernate-mapping>  
  6.     <class name="domain.Person" table="person" dynamic-insert="true" >  
  7.        
  8.         <id name="id" column="person_id">  
  9.             <generator class="sequence" >  
  10.                 <param name="sequence">seq</param>  
  11.             </generator>  
  12.         </id>  
  13.            
  14.         <property name="name" column="name" not-null="true" />  
  15.            
  16.         <many-to-one name="address" class="domain.Address" column="address_id" cascade="all" unique="true" />  
  17.         <many-to-one name="passport" class="domain.Passport" column="passport_id" cascade="all" unique="true" />  
  18.            
  19.     </class>  
  20. </hibernate-mapping>  

 

Xml代码 复制代码
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3. "-//Hibernate/Hibernate Mapping DTD//EN"   
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5. <hibernate-mapping>  
  6.     <class name="domain.Address" table="address" dynamic-insert="true" >  
  7.        
  8.         <id name="id" column="address_id">  
  9.             <generator class="foreign" >  
  10.                 <param name="property">person</param>  
  11.             </generator>  
  12.         </id>  
  13.            
  14.         <property name="country" column="country" not-null="true" />  
  15.         <property name="city" column="city" not-null="true" />  
  16.         <property name="street" column="street" not-null="true" />  
  17.            
  18.         <one-to-one name="person" class="domain.Person" property-ref="address" />  
  19.            
  20.     </class>  
  21. </hibernate-mapping>  

 

Xml代码 复制代码
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3. "-//Hibernate/Hibernate Mapping DTD//EN"   
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5. <hibernate-mapping>  
  6.     <class name="domain.Passport" table="passport" dynamic-insert="true" >  
  7.        
  8.         <id name="id" column="passport_id">  
  9.             <generator class="foreign" >  
  10.                 <param name="property">person</param>  
  11.             </generator>  
  12.         </id>  
  13.            
  14.         <property name="num" column="num" not-null="true" />  
  15.            
  16.         <one-to-one name="person" class="domain.Person" property-ref="passport" />  
  17.     </class>  
  18. </hibernate-mapping>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值