在休眠时如果我执行以下操作
class User{
@ManyToMany
private List<UserRole> roles;
}
它会创建一个单独的表User_UserRole
,其中有两列(user_id and roles_id
)
但我想要第三列,例如&#34; id
&#34;它唯一地标识每一行,并且自动生成id。
我该怎么做?
答案 0 :(得分:1)
使用默认行为你无法实现这一点,但是如果你可以自己在数据库中创建表(而不是让hibernate这样做)然后映射
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "User_UserRole", joinColumns = { @JoinColumn(name = "USER_ID") }, inverseJoinColumns = { @JoinColumn(name = "ROLES_ID") })
private List<UserRole> roles;
当然你也会在表定义中使用id列自动增量。
答案 1 :(得分:1)
您可以使用以下实现
来实现@Entity
class User{
@Id
private int id;
@OneToMany(mappedBy=role)
private List<UserRole> roles;
}
@Entity
@Table(name="USER_ROLE")
class UserRole{
@Id
private int id; <--ID you were looking for
@ManyToOne
private User user; <--User ID
@ManyToOne
private Role role; <--Role ID
}
@Entity
class Role{
@Id
private int id;
@OneToMany(mappedBy=user)
private List<UserRole> roles;
}
Trick is break在两个OneToMany中指向Jointable的ManyToMany关系。这个有效!! 您还可以在USER_ROLE表中添加其他列,而不会破坏任何内容