import java.util.HashSet;
import java.util.Set;
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.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
/**
* 双向1-1关联(基于外键)两端都需要@OneToOne
* 外键可以存放于任意一端 存放外键的一端需要增加@JoinColumn注解来外键映射
* 使用mappedBy属性(放在没有使用@JoinColumn注解一端)
* */
@Entity
@Table(name="person_inf")
public class Person {
@Id
@Column(name="person_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id ;
private String name;
private Integer age;
@OneToOne(targetEntity=Address.class,mappedBy="person")
private Address address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
package com.dt.pojo;
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.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name="address_inf")
public class Address {
@Id
@Column(name="address_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer addressId;
private String addressDetail;
@OneToOne(targetEntity=Person.class)
@JoinColumn(name="person_id",referencedColumnName="person_id",unique=true)
private Person person;
public Address(String addressDetail) {
super();
this.addressDetail = addressDetail;
}
public Integer getAddressId() {
return addressId;
}
public void setAddressId(Integer addressId) {
this.addressId = addressId;
}
public String getAddressDetail() {
return addressDetail;
}
public void setAddressDetail(String addressDetail) {
this.addressDetail = addressDetail;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
package com.dt.util;
import org.hibernate.Transaction;
import com.dt.pojo.Address;
import com.dt.pojo.Person;
import org.hibernate.Session;
import java.util.*;
/**
* @author dt 双向1-1基于外键
* @version 1.0
*/
public class PersonManager
{
public static void main(String[] args)
{
PersonManager mgr = new PersonManager();
mgr.createAndStorePerson();
HibernateUtil.sessionFactory.close();
}
private void createAndStorePerson()
{
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();
// 创建Person对象
Person person = new Person();
person.setAge(26);
person.setName("张三");
session.save(person);
Address a1 = new Address("广州天河"); //创建一个瞬时态对象
a1.setPerson(person);
session.save(a1);
tx.commit();
HibernateUtil.closeSession();
}
}