登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

清风幻影的博客

Where there is love, I will be there.

 
 
 

日志

 
 
关于我

同是天涯沦落人,相逢何必曾相识. 天生我材必有用,千金散尽还复来. 天若有情天亦老,人间正道是沧桑. 月影西斜人已去, 堤上梅花情依旧, 此情故已成追忆, 美人如玉夜留香

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

2010-10-21 09:02:03|  分类: hiber_1 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

实体
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
  评论这张
 
阅读(1121)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018