当前位置: 首页 > 面试题库 >

双向一对多连接

宋子辰
2023-03-14
问题内容

我在与JoinTables进行双向一对多关联时遇到了一些问题。这就是我得到的:

A类:

@OneToMany
@JoinTable(name="join_table", 
    JoinColumns={@JoinColumn(name="a_id")},
    inverseJoinColumns={@JoinColumn(name="b_id")}
)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
public Set<B> getBs() {
    return bs;
}

B类:

@ManyToOne
@JoinTable(name="join_table", 
    joinColumns={@JoinColumn(name="b_id", insertable=false,updatable=false)},
    inverseJoinColumns={@JoinColumn(name="a_id", insertable=false,updatable=false)})
public A getA() {
    return a;
}

如果创建A和B的实例,请将B的实例添加到A并保存。有用。但是,当我重新加载A的实例并尝试访问B的集合时,它将引发LazyInitializationError并显示消息“对加载集合的非法访问”。

我在哪里错了?:)谁能指出我一个使用联接表的双向关联示例。在所有权保留为A类的地方,我搜索了hibernate.org上的文档,但似乎找不到。

-丹尼尔


问题答案:

您的映射是正确的,因此正将条目保存在数据库中。提取中的问题是 由于延迟初始化

为了解决这个问题,将A类的映射修改为

@OneToMany(fetch=FetchType.LAZY)
@JoinTable(name="join_table", 
    joinColumns={@JoinColumn(name="a_id")},
    inverseJoinColumns={@JoinColumn(name="b_id")}
)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
public Set<B> getBs() {
    return bs;
}

这将对表B触发附加查询并初始化集合。它可能会影响性能,具体取决于被告表中条目的数量。

在此处阅读API 以获得更多信息。



 类似资料:
  • 1. 前言 本节课程和大家一起聊聊一对多关联映射。通过本节课程,你将了解到: 如何实现一对多关联映射; 如何实现双向一对多关联映射; 关联映射中的级联操作。 2. 一对多关联映射 关系型数据库中表与表中的数据存在一对多(或多对一)关系。 如学生表、班级表。一个班级有多个学生,多个学生可以在同一个班级。 一对多或多对一本质上是一样的,如同一块硬币的正面和反面,只是看待事物的角度不同而已。 数据库中有

  • 我有一个需要在多个地方使用的实体类。所以我创建了一个如下的泛型类 我还有另外两个类正在使用这个类 另一个使用输出的类

  • 问题内容: 我正在尝试以“一个”为父级建立双向一对多关系 我有一个父: 和一个子: 我使用了Hibernate官方文档(2.2.5.3.1.1)中的建议。但是,Hibernate似乎并不了解CuePoint是一个子实体,因此,当我删除CuePoint时,它也会删除VideoOnDemand以及所有其他CuePoints。 我在做什么错,正确的方法是什么? 问题答案: 这样,您就可以将一个唯一的双向

  • 1. 前言 通过本节课程的学习,你将发现关联对象之间的微妙关系。相信这种关系对你更深入地认识 HIbernate 有很大的帮助。 通过本节课程,你将了解到: 多对多双向关联映射中哪一方是关系维系者; 级联操作与关系维系者。 2. 关系维系者 新学期开始了,同学们选择了各自喜欢的课程,现在为学生添加选修课程的任务就要落在 Hibernate 的身上。一起来看看 Hibernate 是如何完成这个任务

  • 问题内容: 问题: 我 在* 两个实体 A和B 之间 有 多对多关联 。我将 A实体 设置为其 关系 的 所有者 (inverse = true在b.hbm.xml中A的集合上)。 * 当我 删除一个A实体时 , 联接表中的 相应 记录也会被删除 。 当我 删除一个B实体时 , 联接表中的 相应 记录不会被删除 (完整性违反异常)。 - 让我们考虑一些非常简单的 示例 : 文件 a.hbm.xml

  • 问题内容: 我正在努力进行双向多对多映射,其中顺序在一侧很重要,而在另一侧则不重要。 我有两节课:程序和学生。 一个程序有很多学生,顺序很重要。 程序A 约翰 莎莉 赛斯 程式B 亚历克斯 赛斯 艾米 约翰 一个学生有很多程序,但是顺序在这里并不重要。 John 程序A 程序B 莎莉 程序A 赛斯 程序A 程式B 亚历克斯 程式B 艾米 程式B 因此,似乎我可以在程序和学生之间建立双向的多对多关联