我们需要将两个键都放入@Embeddable 以分离复合键,然后使用@EmbeddedId 将其放入User 实体中并使用Hibernate Relational Mapping 映射两个主键...
Composite Primary Key有两种选择:
- 使用
@EmbeddedId
- 使用
@IdClass()
下面是例子:
---------------------- 使用 EmbeddedId -------- ----------------------------------------
复合主键:
@Embeddable
public class UserIdName implements Serializable {
int id;
String name;
// getter and setter
}
用户:
@Entity
@Table(name = "users")
public class USER{
@EmbeddedId
private UserIdName id;
String department;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
private Set<Userdetail> userdetail;
// getter and setter
}
用户详情:
@Entity
@Table(name = "Userdetail")
public class Userdetail {
@Id
private int detail_id;
@ManyToOne
@JoinColumns({ @JoinColumn(name = "id", referencedColumnName = "id"),
@JoinColumn(name = "name", referencedColumnName = "name") })
private USER user;
String address;
String otherFields;
// getter setter
}
---------------------- 使用 IdClass -------- ----------------------------------------
复合主键:
public class UserIdName implements Serializable {
int id;
String name;
// getter and setter
}
用户:
@Entity
@Table(name = "users")
@IdClass(UserIdName.class)
public class USER{
@Id
int id;
@Id
String name;
String department;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
private Set<Userdetail> userdetail;
// getter and setter
}
用户详情:
@Entity
@Table(name = "Userdetail")
public class Userdetail {
@Id
private int detail_id;
@ManyToOne
@JoinColumns({ @JoinColumn(name = "id", referencedColumnName = "id"),
@JoinColumn(name = "name", referencedColumnName = "name") })
private USER user;
String address;
String otherFields;
// getter setter
}
->如果您想手动插入两个外键,请尝试以下代码
将此代码放入UserDetails
@ManyToOne
@JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false)
@JoinColumn(name = "name", referencedColumnName = "name", insertable = false, updatable = false)
private USER user;
@Column(name="id")
private int id;
@Column(name="name")
private String name
// don't forget to put getter setter
用户表:
用户明细表: