我的用户实体:
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinTable(
name="UserRole",
joinColumns = @JoinColumn(name="USER_ID"),
inverseJoinColumns = @JoinColumn(name="ROLE_ID")
)
public Set<Role> role;
我的角色实体:
@ManyToOne(cascade = CascadeType.ALL)
@JoinTable(
name="UserRole",
joinColumns= @JoinColumn(name="ROLE_ID")
)
private User user;
现在,在数据库中创建的相应中间表具有以下属性。
@ManyToOne(cascade = CascadeType.ALL)
@JoinTable(
name="UserRole",
joinColumns = @JoinColumn(name = "ROLE_ID"),
inverseJoinColumns = @JoinColumn(name="USER_ID")
)
private User user;
在user
实体中,您已经用role
声明了@onetomany
,并使用@jointable
给出了有关联接表的详细信息。
因此,如果需要User
和Role
实体之间的双向
,那么在Role
实体中添加User
属性和@manytoone
声明就足够了,因此无需再次使用@jointable
。
现在来看user_userid
-在role
实体中,您已经声明了@jointable
注释,该注释需要两个列名用于联接表。
@JoinTable(
name="JoinTableName",
joinColumns = @JoinColumn(name="ID_NAME_FOR_THIS_ENTITY"),
inverseJoinColumns = @JoinColumn(name="ID_NAME_FOR_THE_MAPPING_ENTITY")
)
但是您提供了一个名称为role_id
的名称,忽略了第二个名称,即InverseJoinColumns
,它指向User
实体。
@JoinTable(
name="UserRole",
joinColumns= @JoinColumn(name="ROLE_ID")
)
所以hibernate应该猜测InverseJoinColumns
的列名,所以它创建一个列,该列的名称是小写的实体名称(在您的例子中是User
)和由下划线分隔的实体标识符(我猜是UserID
,基于列名)的组合。因此,最后列名变成user_userid
。
更新:
如果您需要双向关系,那么您需要像这样声明您的实体:
@OneToMany(mappedBy="user", cascade=CascadeType.ALL,fetch=FetchType.EAGER)
public Set<Role> role;
这里告诉hibernateUser
实体与Role
实体具有一对多关系,这种关系是双向的,Role
实体具有一个名为User
的属性。
现在,在您的角色
实体中,您将提供关于可连接
的详细信息,如下所示:
@ManyToOne(cascade = CascadeType.ALL)
@JoinTable(
name="UserRole",
joinColumns = @JoinColumn(name="ROLE_ID"),
inverseJoinColumns = @JoinColumn(name="USER_ID")
)
private User user;
我有两张桌子。后 和喜欢 在这些对象之间进行hibernate注释映射,以便在类似于Post bean的。。。。 就像豆子一样 问题 该关联是否由Post{@OneToOne}和like{@ManyToOne}正确? 获取类型是Lazy,但仍然得到依赖循环。为什么? 尝试 要删除依赖关系循环,我尝试了 {@xmltransive} {@JsonIgnore} {@JsonManagedRefere
Hi编写Spring应用程序,使用Spring Security。这是我的用户和帐户角色数据库: 我的实体类: 当我尝试登录我的系统我有错误: Hibernate:选择userrolese0_. username作为username3_1_0_,userrolese0_. id作为id1_0_0_,userrolese0_. id作为id1_0_1_,userrolese0_. name作为nam
问题内容: 映射双向列表时,我不了解Hibernate的行为。Hibernate生成的SQL语句对我来说并不是最佳的。有人可以启发我吗? 情况如下:我有一对多的父子关系。我将此关系与双向列表映射。 根据《Hibernate注释参考指南》(第7章:与索引集合的双向关联),映射应如下所示: 但是在这种情况下,Hibernate在保留一个孩子的父母时会产生三个SQL语句: 第三条语句似乎是多余的,因为并
我在Kotlin-vertx项目中配置了Hibernate,我设法设置了所有内容,但当我运行HQL查询时,它会输出: 提前谢了。
是否有可能不在HiberNate中的实体层次结构中间为类创建表? 我想指出某些实体是某种类型的子集,以便返回所有这些实体的集合,但我不会在此中间类型中放置任何额外的属性。因此,保留带有id字段的额外表只是为了连接表,这听起来并不好。 更好的解决方案是实现一些公共接口< code>CommonInterface,但是这样我就失去了返回< code>List的可能性
1. 前言 通过本节课程的学习,你将发现关联对象之间的微妙关系。相信这种关系对你更深入地认识 HIbernate 有很大的帮助。 通过本节课程,你将了解到: 多对多双向关联映射中哪一方是关系维系者; 级联操作与关系维系者。 2. 关系维系者 新学期开始了,同学们选择了各自喜欢的课程,现在为学生添加选修课程的任务就要落在 Hibernate 的身上。一起来看看 Hibernate 是如何完成这个任务