Hibernate一对一外键双向关联(Annotation配置篇)

Hibernate一对一外键双向关联(Annotation配置篇)

Husband.java
package  com.one2one.bean;

import  javax.persistence.CascadeType;
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.Table;

@Entity
@Table(name
= " husband " ,catalog = " Hibernate_One2One_fk " )
public   class  Husband {
    
    
private   int  id;
    
private  String name;
    
private  Wife wife;
    @Id
    @Column(name
= " id " )
    @GeneratedValue(strategy
= GenerationType.AUTO)
    
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(cascade
= CascadeType.ALL,mappedBy = " husband " )
    
public  Wife getWife() {
        
return  wife;
    }
    
public   void  setWife(Wife wife) {
        
this .wife  =  wife;
    }
    
}
Wife.java
package  com.one2one.bean;

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

@Entity
@Table(name
= " wife " ,catalog = " Hibernate_One2One_fk " )
public   class  Wife {
    
    
private   int  id;
    
private  String name;
    
private  Husband husband;
    @Id
    @Column(name
= " id " )
    @GeneratedValue(strategy
= GenerationType.AUTO)
    
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(cascade
= CascadeType.ALL)
    @JoinColumn(name
= " husband_id " )
    
public  Husband getHusband() {
        
return  husband;
    }
    
public   void  setHusband(Husband husband) {
        
this .husband  =  husband;
    }
    
}

导出的sql
create   table  Hibernate_One2One_fk.husband (
        id 
integer   not   null  auto_increment,
        name 
varchar ( 255 ),
        
primary   key  (id)
    )

    
create   table  Hibernate_One2One_fk.wife (
        id 
integer   not   null  auto_increment,
        name 
varchar ( 255 ),
        husband_id 
integer ,
        
primary   key  (id)
    )

    
alter   table  Hibernate_One2One_fk.wife 
        
add   index  FK37AF119039AEDD (husband_id), 
        
add   constraint  FK37AF119039AEDD 
        
foreign   key  (husband_id) 
        
references  Hibernate_One2One_fk.husband (id)

测试代码
@Test
    
public   void  save(){
        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);
            session.save(wife);
            transaction.commit();
        } 
catch  (HibernateException e) {
            e.printStackTrace();
        }
    }
    
    @Test
    
public   void  select(){
        Session session
= HibernateSessionFactory.getSession();
        Husband husband
= (Husband) session.get(Husband. class 1 );
        System.out.println(husband.getName());
        System.out.println(husband.getWife().getName());
    }

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