![](/img/trans.png)
[英]Weird org.hibernate.LazyInitializationException when do JUNIT
[英]JUnit hibernate.LazyInitializationException
我有一对多双向的简单示例。
@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);
}
一切都好但是我让@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
我该如何解决这个问题?
我尝试添加@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 中工作?
但是为什么我必须在@Test 调用中添加@Transactional 以及为什么它在没有@Transactional 的情况下在controller 中工作?
Open Session in View ( OSIV
) 在Spring Boot
应用程序中默认启用,这可以解释为什么您的生产代码不需要@Transactional
对使用延迟初始化实体的方法进行注释。 然而,启用OSIV
有其缺点,并且被认为是反模式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.