Java 休眠连接列而不是通过主键引用
我有很多关系的用户和角色类。当我将角色对象添加到用户对象中的角色列表时,“用户角色”表列“用户名”和“角色名称”将填充用户和角色对象主键,它们是它们的ID。我想知道是否可以不引用主键(ID),而是在这些列中获取username和Role.nameJava 休眠连接列而不是通过主键引用,java,mysql,hibernate,jpa,Java,Mysql,Hibernate,Jpa,我有很多关系的用户和角色类。当我将角色对象添加到用户对象中的角色列表时,“用户角色”表列“用户名”和“角色名称”将填充用户和角色对象主键,它们是它们的ID。我想知道是否可以不引用主键(ID),而是在这些列中获取username和Role.name @Entity @Table(name = "users") @SecondaryTable(name = "user_info", pkJoinColumns = { @PrimaryKeyJoinColumn(name = "info_id", r
@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;
@实体
@表(name=“users”)
@SecondaryTable(name=“user\u info”,pkJoinColumns={
@PrimaryKeyJoinColumn(name=“info\u id”,referencedColumnName=“user\u id”)})
公共类用户{
@身份证
@列(name=“user\u id”)
@GeneratedValue(策略=GenerationType.IDENTITY)
私有int-id;
@列(name=“username”)
私有字符串用户名;
@列(name=“password”)
私有字符串密码;
@许多
@JoinTable(name=“用户角色”,
joinColumns={@JoinColumn(name=“username”/*,referencedColumnName=“username”*/)},
inverseJoinColumns={@JoinColumn(name=“role\u name”/*,referencedColumnName=“role\u name”*/)}
)
私有列表角色;
@实体
@表(name=“roles”)
公共阶级角色{
@身份证
@列(name=“role\u id”)
@GeneratedValue(策略=GenerationType.IDENTITY)
私有int-id;
@列(name=“role\u name”)
私有字符串名称;
@许多
私人名单用户;
此外,如果删除referencedColumnName周围的注释,则在尝试从数据库中获取所有用户时会出现错误。我尚未向数据库添加任何数据,因此即使在查询空数据库时也会出现以下错误:
原因:org.hibernate.HibernateException:找到共享引用
到集合:com.recipee.model.User.roles
我之所以使用这样的数据库模式,是因为我试图使用Tomcat领域身份验证,在一个数据库表中需要用户名和角色名。错误消息表明您在两个不同的用户中共享相同的角色列表。您正在这样做吗?如果是,不要这样做。@jbnizenot我不这么认为。我所做的只是调用listUsers()方法,该方法对数据库的查询如下:
List userList=session.createQuery(“from User”).List();
错误消息表明您在两个不同的用户中共享相同的角色列表。您正在这样做吗?如果是,请不要这样做。@JBNizet我不这样认为。我所做的只是调用listUsers()对数据库进行查询的方法如下:List userList=session.createQuery(“来自用户”).List();