无法延迟初始化角色集合:com.pojo.Student.phonenos,没有会话或会话被关闭
-
27-10-2019 - |
题
我正在学习使用注释的休眠映射。我已经完成了一节。即保存父表时,可以自动插入子类。 请参见。
但是在获取主表时我没有得到子表。也出现错误 通用标签
我的代码已添加到此处供您查看。请通过它。并给我很好的建议。 Student.java。 (父类) 通用标签
Phone.java(子类) 通用标签
我的道课 通用标签
输出是 通用标签
这里我使用的是单向(外键)一对多映射(不是联合表,双向)。
总结我的问题
1)在获取父表时如何获取子表,反之亦然
2)什么是渴望和懒惰获取。
3)在一对多映射的情况下,单向,双向和联接表的功能更强大。
解决方案
1)
如果您确实想在每次检索到这些类的任何实体时都这样做,请指定 FetchMode.EAGER
。默认情况下,@OneToMany
渴望。请注意,如果仅在特定情况下需要获取那些实体,这可能在很大程度上是无效的。如果是这种情况,则必须像执行操作一样进行操作,但是请确保检索到@ManyToOne
对象的会话仍处于打开状态。看到您正在使用Spring,您是否尝试过使用Student
注释DAO / Service,以便在方法执行期间使会话保持活动状态?或者您是否尝试过使用@Transactional
,例如:
通用标签
2)看一下这个问题: FetchType LAZY和EAGER在Java持久性方面有区别吗?。
3)这取决于您的需求。如果只需要以一种方式导航关联,则仅以这种方式单向定义。如果您同时需要两者。 Join Table与数据库设计有更多关系。如果您想在手机的Hibernate.execute()
表中有一个FK,并引用电话所属的Phone
,或者您想要一个联接表,其中包含每个Student
的Phones
。