延迟加载对Spring Boot上的OneToMany关系不起作用

时间:2016-10-09 18:58:20

标签: spring hibernate spring-mvc spring-boot spring-data-jpa

我一直在使用spring boot数据jpa + spring + mysql + thymeleaf并遇到了问题。 列表是@OneToMany (fetch = FetchType.LAZY)关系,列表加载hibernate,如@OneToMany (fetch = FetchType.EAGER)外。但是,如果我使用注释@ManyToOne,这确实很有效。

知道为什么会发生这种行为吗? 顺便说一下,我想保留spring.jpa.open-in-view = true属性。我调试了One to Many中开发的应用程序 - 书籍(IntelliJ IDEA)。

这是Book课程。

@Entity
public class Book implements Serializable {
   @Id
   @GeneratedValue
   private Integer id;

   @NotNull
   private String name;

   @NotNull
   @JoinColumn(name = "author_id")
   @ManyToOne(fetch = FetchType.LAZY)
   private Author author;

  /* getters and setters */
}

这里有作者

@Entity
public class Author implements Serializable {
   @Id
   @GeneratedValue
   private Integer id;

   @NotNull
   private String name;

   @OneToMany(mappedBy = "author", fetch = FetchType.LAZY)
   private List<Book> bookList;

   /* getters and setteres */
}

用于调试的控制器。

@Controller
@RequestMapping("/")
public class HomeController {

    @Autowired
    private AuthorRepository authorRepository;

    @Autowired
    private BookRepository bookRepository;

    @GetMapping
    private ModelAndView index() {
        List<Author> authorList = authorRepository.findAll();
        return new ModelAndView("home"); // first breakpoint
    }

    @GetMapping("/books")
    private ModelAndView viewBooks() {
        List<Book> bookList = bookRepository.findAll();
        return new ModelAndView("books"); // second breakpoint
    }

}

这是结果。

第一个断点结果 First breakpoint result

第二个断点结果 Second breakpoint result

1 个答案:

答案 0 :(得分:-2)

一切似乎都被正确定义,经过研究,我已经完成了Spring数据确实使用延迟加载加上你在关联上定义它。

我相信当你使用调试视图来告诉里面的内容时,你实际上是在进行提取。