我正在学习使用注释的休眠映射。我已经完成了一节。即保存父表时,可以自动插入子类。 请参见

但是在获取主表时我没有得到子表。也出现错误 通用标签

我的代码已添加到此处供您查看。请通过它。并给我很好的建议。 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,或者您想要一个联接表,其中包含每个StudentPhones

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top