我一直在使用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
}
}
这是结果。
答案 0 :(得分:-2)
一切似乎都被正确定义,经过研究,我已经完成了Spring数据确实使用延迟加载加上你在关联上定义它。
我相信当你使用调试视图来告诉里面的内容时,你实际上是在进行提取。