我有2个实体:用户和角色 我有一个类Userrole,它将包含用户和角色之间的复合键。
现在Userrole不会包含userId和roleId ..但是对象User和Role它看起来像这样:
public class UserRole implements Serializable{
User user;
Role role;
我可以将@Id放在用户身上吗?像:
@Id
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
答案 0 :(得分:2)
使用注释,您需要为复合ID定义一个合适的类,并将其注释为@Embeddable
。 (使用XML,我们也可以映射复合ID而不使用显式的id类。)以下an example using an inner class为复合ID,another one, with a top-level id class。
答案 1 :(得分:0)
没有。 您只能在基元中使用@Id。但你可以使用@ComposeId或@IdClass(类似的东西,现在无法访问hibernate doc ...)并将用户映射为你的组合id
答案 2 :(得分:0)
我会这样做:
@Entity
public class User {
...
@OneToMany
public Set<UserRoles> getUserRoles() {
return this.userRoles;
}
}
@Entity
public class UserRole {
...
@Id
@GeneratedValue
public long getId() {
return this.id;
}
@ManyToOne
public Role getRole() {
return this.role;
}
@ManyToOne
public Role getCategory() {
return this.category;
}
}