
實體
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;
}
}
Wifeimport 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;
}
}
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這端添加一個外鍵約束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;
}
}
添加上上述屬性使用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)
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();
}
}
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();
}
}
溫馨提醒:此處必須同時設置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
示例程序