下面的代码说明了Employee和EmployeeInfo是一对一关系。他们都使用复合主键,建表时需要在Employee表建立一个外键,从Employee的主键列id,name指向EmployeeInfo的主键列INFO_ID和INFO_NAME.
...
@Entity@IdClass(EmpPK.class)@Table(name = "EMPLOYEE")
public class Employee {
private int id;
private String name;
private String address;
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumns({
@PrimaryKeyJoinColumn(name="id", referencedColumnName="INFO_ID"),
[color=red]@PrimaryKeyJoinColumn (name="name" , referencedColumnName="INFO_NAME")})
EmployeeInfo info; }[/color]
@Entity@IdClass(EmpPK.class)
@Table(name = "EMPLOYEE_INFO")
public class EmployeeInfo {
@Id
@Column(name = "INFO_ID")
private int id;
@Id @Column(name = "INFO_NAME")
private String name; }
主要想用id 和 info_id 关联,但是表结构分别定义了复合主键,上面红色部分写上后,查询时就会关联,但是本不想用其关联,不写就会报错
org.hibernate.MappingException: Foreign key (FKA0CF06E343644E74:t_EMPLOYEE[id,name])) must have same number of columns as the referenced primary key (EMPLOYEE_INFO[INFO_ID,INFO_NAME])
求教,如何设置JPA OneToOne 只是关联ID,千万不要说 表设计时取消 复合主键,麻烦了各位。