主キーの関連付けのマッピング
user.java
package com.hibernate.entity;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import org.hibernate.annotations.GenericGenerator;
@Entity
public class User {
private Integer id;
private String userName;
private String password;
private Person person;
@Id
@GeneratedValue(generator = "my_gen")
@GenericGenerator(name="my_gen",strategy = "increment")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name="user_name")
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn(name="id")
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
@Override
public String toString() {
return "User [id=" + id + ", userName=" + userName + ", password=" + password + ", person=" + person + "]";
}
}
Person.java
package com.hibernate.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
@Entity(name = "hibernate_04_01_person")
public class Person {
private Integer id;
private String realName;
private String idNumber;
private User user;
@Id
@GeneratedValue(generator = "my_gen")
@GenericGenerator(name="my_gen",strategy = "foreign",parameters = @Parameter(name="property",value="user"))
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name="real_name")
public String getRealName() {
return realName;
}
public void setRealName(String realname) {
this.realName = realname;
}
@Column(name="id_number")
public String getIdNumber() {
return idNumber;
}
public void setIdNumber(String idNumber) {
this.idNumber = idNumber;
}
@OneToOne(mappedBy = "person")
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String toString() {
return "Person [id=" + id + ", realname=" + realName + ", idNumber=" + idNumber + ", user=" + user + "]";
}
}
一意の外部キーの関連付け
User.java
package com.hibernate.entity;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import org.hibernate.annotations.GenericGenerator;
@Entity(name="hibernate_04_02_user")
public class User {
private Integer id;
private String userName;
private String password;
private Person person;
@Id
@GeneratedValue(generator = "linshi1")
@GenericGenerator(name="linshi1",strategy = "increment")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name="user_name")
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Column(name="password")
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="person_id")
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
@Override
public String toString() {
return "User [id=" + id + ", userName=" + userName + ", password=" + password + ", person=" + person + "]";
}
}
Person.java
package com.hibernate.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import org.hibernate.annotations.GenericGenerator;
@Entity(name="hibernate_04_02_person")
public class Person {
private Integer id;
private String realName;
private String idNumber;
private User user;
@Id
@GeneratedValue(generator="linshi")
@GenericGenerator(name="linshi",strategy = "increment")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name="real_name")
public String getRealName() {
return realName;
}
public void setRealName(String realname) {
this.realName = realname;
}
@Column(name="id_number")
public String getIdNumber() {
return idNumber;
}
public void setIdNumber(String idNumber) {
this.idNumber = idNumber;
}
@OneToOne(mappedBy = "person")
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String toString() {
return "Person [id=" + id + ", realname=" + realName + ", idNumber=" + idNumber + ", user=" + user + "]";
}
}