私はSpringブートデータjpa + spring + mysql + thymeleafを使用していて問題が発生しました。 リストに@OneToMany (fetch = FetchType.LAZY)
リレーションシップがあり、リストには@OneToMany (fetch = FetchType.EAGER)
のような休止状態がロードされます。しかし、私が注釈@ManyToOne
を使用すると、これは完全に機能します。Spring起動時にOneToMany関係で遅延ロードが機能しない
なぜこの動作が発生するのでしょうか? ところで、私はspring.jpa.open-in-view = trueプロパティを保持したいと思います。私はアプリケーションをデバッグします。IntelliJ IDEA
で開発された書籍(One to Many
)。
ここはブッククラスです。ここでは、クラスの著者
@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 */
}
デバッグ用のコントローラ
@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 */
}
。
@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
}
}
結果は次のとおりです。
オブジェクトにアクセスしようとすると、レイジーフェッチタイプはフェッチを実行します。エンティティのロード/取得に使用するコードはどこですか?あなたはそれを投稿できますか? –
私はIntellij IDEAデバッグでのみデバッグしています。最初のブレークポイントの結果はブックリストを読み込むべきではありません。この場合、ブックリストのサイズは0にする必要があります。最初のブレークポイントの結果は[link](http://i.stack.imgur.com/oArYW.png)です。 – Dar
コード、tnxを投稿していただければ幸いです。 –