gpt4 book ai didi

java - 调用惰性初始化字段的 getter 后出现 org.hibernate.lazyinitializationException

转载 作者:行者123 更新时间:2023-12-02 09:50:07 27 4
gpt4 key购买 nike

我有一篇带有惰性初始化字段评论的类(class)帖子:

@Entity
@Table(name = "POSTS")
public class Post {

@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "post_id",
unique = true, nullable = false)
@JsonView(Views.Public.class)
private Integer postId;

@Column(name = "POST_BODY", columnDefinition = "text")
@JsonView(Views.Public.class)
private String postBody;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "USERNAME")
private User user;

@OneToMany(cascade = CascadeType.ALL, mappedBy = "post", fetch = FetchType.LAZY)
private Set<PostComment> comments = new HashSet<>();
}

正如我从 hibernate 文档中了解到的,如果某些东西由于延迟初始化而未初始化,如果您随后调用它的 getter 方法,它应该被初始化,但是当我收到我的帖子并尝试调用 getter 方法进行注释时,我得到一个异常。

@GetMapping(path = {"/post/{id}"})
public ModelAndView showSpecificPost(@PathVariable(value = "id") Integer id) {
User currentUser = userService.findByUserName(auth.getName());
Post post = postService.getPostById(id);
logger.info(post.getComments().size());
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("postTemplates/specificPost");

return modelAndView;
}

最佳答案

很可能交易是通过这种方法进行的:

Post post = postService.getPostById(id);

然后你尝试:

logger.info(post.getComments().size());

位于此时已关闭的交易之外,并且 Post此时是一个独立的实体。

您的选择之一是使用 @Transactional(readOnly = true) 注释 Controller 请求映射方法。 。

关于java - 调用惰性初始化字段的 getter 后出现 org.hibernate.lazyinitializationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56378834/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com