我有具有ManyToMany关系的用户和角色类。当我将Role对象添加到User对象中的List角色时,'user_roles'表列'username'和'role_name'将填充用户和角色对象主键',这些是他们的ID。我想知道是否可以引用主键(ids)并在这些列中获取用户名和Role.name?
@Entity
@Table(name = "users")
@SecondaryTable(name = "user_info", pkJoinColumns = {
@PrimaryKeyJoinColumn(name = "info_id", referencedColumnName = "user_id") })
public class User {
@Id
@Column(name = "user_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
@ManyToMany
@JoinTable(name="user_roles",
joinColumns= {@JoinColumn(name="username"/*, referencedColumnName="username"*/)},
inverseJoinColumns= {@JoinColumn( name="role_name"/*, referencedColumnName="role_name"*/)}
)
private List<Role> roles;
@Entity
@Table(name = "roles")
public class Role {
@Id
@Column(name = "role_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "role_name")
private String name;
@ManyToMany
private List<User> users;
此外,如果我删除referencedColumnName周围的注释,则在尝试从数据库中获取所有用户时会出现错误。我没有向数据库添加任何数据,所以即使查询空数据库我也收到此错误:
引起:org.hibernate.HibernateException:找到共享引用 集合:com.recipee.model.User.roles
我使用这种数据库模式的原因是因为我正在尝试使用Tomcat领域身份验证,我需要在一个数据库表中使用username和role_name。