我对冬眠有点困惑 fetch
选项。我在我的项目中使用springboot2、spring数据和hibernate。假设我有一个实体 User
. 每个 User
可能有很多 Post
当然每个人 Post
可能有很多 Comment
实体。我设计了 SQL
如下所示的数据库表;
User
id (PK)
username
password
Post
id (PK)
title
content
user_id (FK)
Comment
id (PK)
content
post_id (FK)
因此,如果我需要列出特定用户的帖子,就不需要获取评论。 LAZY
那当然更好了。但是,如果我需要返回特定的post do display,我需要同时获取post及其评论。所以, EAGER
应使用fetch。
我应该如何定义类的获取类型?我确信这些关系数据库有一个设计模式,但我不知道。所有的教程都解释了lazy和eager获取类型、优缺点,但是我没有找到在需要同时使用lazy和eager时该怎么做。我试图定义抓取和使用 Spring Data Repository
简化数据库查询的接口。对于急切的抓取,我尝试编写一个自定义数据库查询。但是,我无法查询嵌套联接(即查询特定用户的所有帖子及其评论)。我可以查询第一个用户,然后每个用户的帖子,然后每个帖子的评论,但正如你所知道的,它不是应该如何。
这类关系数据的通用模式是什么?小时
1条答案
按热度按时间34gzjxbg1#
你应该使用
@OneToMany
与FetchType.LAZY
(无需设置为默认值)另外,如果您试图访问事务范围之外的列表,那么您将得到
LazyInitializationException
因为hibernate不会发出额外的查询来获取FetchType.LAZY
收藏。要在事务范围之外解决此问题,可以使用
对于要加载评论的帖子。但是,如果尝试访问事务作用域中的注解,则不需要手动初始化,hibernate将根据需要发出查询。