假设将Wife类的id和name同设为主键则需要写一个主键类:WifePk操作如下
package hibernate001test;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.IdClass;
@Entity
@IdClass(WifePk.class)//联合主键生成策略
public class Wife {
private int id;
private String name;
private int age;
@Id
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Id
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
如下为主键类:
package hibernate001test;
/**
* 主键类(id和name同为主键)
* @author Lenovo
*
*/
public class WifePk {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
如下为测试类
package hibernate001test;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.OneToOne;
@Entity
public class Husbent {
private int id;
private String name;
private Wife wife;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToOne
// 这个注解可以修改字段的名字(可写可不写)
@JoinColumns({ @JoinColumn(name = "wifeid", referencedColumnName = "id"),
@JoinColumn(name = "wifename", referencedColumnName = "name") })
public Wife getWife() {
return wife;
}
public void setWife_id(Wife wife) {
this.wife = wife;
}
}
测试方法
package datatest;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
/**
* 在一对一双向关联时要使用例如:@OneToOne(mappedBy=”wife”)
* @author Lenovo
*
*/
public class Test {
@org.junit.Test
public void test() {
new SchemaExport(new AnnotationConfiguration().configure()).create(false,true);
}
}