Hibernate一对一主键双向关联映射(Annotation配置)

Hibernate一对一主键双向关联映射(Annotation配置)

实体
Husband
package  com.hibernate.one2one.bean;

import  javax.persistence.Column;
import  javax.persistence.Entity;
import  javax.persistence.GeneratedValue;
import  javax.persistence.GenerationType;
import  javax.persistence.Id;
import  javax.persistence.OneToOne;
import  javax.persistence.PrimaryKeyJoinColumn;
import  javax.persistence.Table;

@Entity
@Table(name
= " husband " )
public   class  Husband {
    
    
private   int  id;
    
private  String name;
    
private  Wife wife;
    @Id
    @GeneratedValue(strategy
= GenerationType.AUTO)
    @Column(name
= " id " )
    
public   int  getId() {
        
return  id;
    }
    
public   void  setId( int  id) {
        
this .id  =  id;
    }
    @Column(name
= " name " )
    
public  String getName() {
        
return  name;
    }
    
public   void  setName(String name) {
        
this .name  =  name;
    }
    @OneToOne
    @PrimaryKeyJoinColumn
    
public  Wife getWife() {
        
return  wife;
    }
    
public   void  setWife(Wife wife) {
        
this .wife  =  wife;
    }
    
}
Wife
package  com.hibernate.one2one.bean;

import  javax.persistence.Column;
import  javax.persistence.Entity;
import  javax.persistence.Id;
import  javax.persistence.OneToOne;
import  javax.persistence.PrimaryKeyJoinColumn;
import  javax.persistence.Table;

@Entity
@Table(name
= " wife " )
public   class  Wife {
    
    
private   int  id;
    
private  String name;
    
private  Husband husband;
    @Id
    @Column(name
= " id " )
    
public   int  getId() {
        
return  id;
    }
    
public   void  setId( int  id) {
        
this .id  =  id;
    }
    @Column(name
= " name " )
    
public  String getName() {
        
return  name;
    }
    
public   void  setName(String name) {
        
this .name  =  name;
    }
    @OneToOne(optional
= false )
    @PrimaryKeyJoinColumn
    
public  Husband getHusband() {
        
return  husband;
    }
    
public   void  setHusband(Husband husband) {
        
this .husband  =  husband;
    }
    
}
温馨提示:注意wife.java里面的@OneToOne(optional=false)   optional=false  属性会在wife这端添加一个外键约束
添加上上述属性使用hbm2ddl导出表,打印出的sql语句
alter   table  wife 
        
drop  
        
foreign   key  FK37AF11D67CB035

    
drop   table   if   exists  husband

    
drop   table   if   exists  wife

    
create   table  husband (
        id 
integer   not   null  auto_increment,
        name 
varchar ( 255 ),
        
primary   key  (id)
    )

    
create   table  wife (
        id 
integer   not   null ,
        name 
varchar ( 255 ),
        
primary   key  (id)
    )

    
alter   table  wife 
        
add   index  FK37AF11D67CB035 (id), 
        
add   constraint  FK37AF11D67CB035 
        
foreign   key  (id) 
        
references  husband (id)

@Test
    
public   void  insert(){
        Session session
= HibernateSessionFactory.getSession();
        Transaction transaction
= session.beginTransaction();
        
try  {
            transaction.begin();
            Husband husband
= new  Husband();
            husband.setName(
" 小明 " );
            session.save(husband);
            Wife wife
= new  Wife();
            wife.setName(
" 如花 " );
            wife.setHusband(husband);
            wife.setId(husband.getId());
            session.save(wife);
            transaction.commit();
        } 
catch  (HibernateException e) {
            e.printStackTrace();
            transaction.rollback();
        }
    }
@Test
    
public   void  insert(){
        Session session
= HibernateSessionFactory.getSession();
        Transaction transaction
= session.beginTransaction();
        
try  {
            transaction.begin();
            Husband husband
= new  Husband();
            husband.setName(
" 小明 " );
            session.save(husband);
            Wife wife
= new  Wife();
            wife.setName(
" 如花 " );
            wife.setHusband(husband);
            wife.setId(husband.getId());
            session.save(wife);
            transaction.commit();
        } 
catch  (HibernateException e) {
            e.printStackTrace();
            transaction.rollback();
        }
    }
温馨提醒:此处必须同时设置
wife.setHusband(husband);
wife.setId(husband.getId());
否则报org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update

示例程序

你可能感兴趣的:(Hibernate一对一主键双向关联映射(Annotation配置))