多对多表具有额外的id列

时间:2014-02-01 05:30:21

标签: mysql hibernate

在休眠时如果我执行以下操作

class User{
     @ManyToMany
     private List<UserRole> roles; 
}

它会创建一个单独的表User_UserRole,其中有两列(user_id and roles_id

但我想要第三列,例如&#34; id&#34;它唯一地标识每一行,并且自动生成id。

我该怎么做?

2 个答案:

答案 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表中添加其他列,而不会破坏任何内容