gpt4 book ai didi

java - JUnit hibernate.LazyInitializationException

转载 作者:行者123 更新时间:2023-12-01 16:39:23 24 4
gpt4 key购买 nike

我有一对多双向的简单示例。

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@Data
@Entity
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String title;
private String description;
private Date createDate;
private int rate;

@ToString.Exclude
@OneToMany(mappedBy = "post",cascade = CascadeType.ALL)
List<Comment> comments=new ArrayList<>();
}

.

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@Data
@Entity
public class Comment {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String text;

@JsonIgnore
@ManyToOne
private Post post;

}

当我打电话时

@GetMapping("post/{id}")
public Post getPost(@PathVariable Long id) {
return postRepository.getOne(id);
}

enter image description here

一切都好但是当我做@Test时

@Test
void getPost() {
Post post = postRepository.getOne(1L);
System.out.println(post);
}

我有错误

org.hibernate.LazyInitializationException: could not initialize proxy [ge.cse.jpademo.model.Post#1] - no Session

enter image description here

我该如何解决这个问题?

我尝试添加 @Transactional 注释及其工作原理。

@Transactional
@Test
void getPost() {
Post post = postRepository.getOne(1L);
System.out.println(post);
}

.

Post(id=1, title=სატესტო პოსტი3, description=სატესტო კონტენტი, createDate=2020-05-19 02:26:16.237, rate=5)

但是为什么我必须在 @Test 调用中添加 @Transactional 以及为什么它在没有 @Transactional 的 Controller 中工作?

最佳答案

But why i must add @Transactional in @Test call and why its works in controller without @Transactional ?

Open Session in View (OSIV) 在 Spring Boot 应用程序中默认启用,这可以解释为什么您的生产代码在使用的方法上不需要 @Transactional 注解延迟初始化的实体。然而,启用 OSIV 也有其缺点,被认为是 anti-pattern .

关于java - JUnit hibernate.LazyInitializationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61896520/

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