2016-10-09 27 views
0

私は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 
    } 

} 

結果は次のとおりです。

最初のブレークポイント結果 First breakpoint result

セカンドブレークポイント結果 Second breakpoint result

+0

オブジェクトにアクセスしようとすると、レイジーフェッチタイプはフェッチを実行します。エンティティのロード/取得に使用するコードはどこですか?あなたはそれを投稿できますか? –

+0

私はIntellij IDEAデバッグでのみデバッグしています。最初のブレークポイントの結果はブックリストを読み込むべきではありません。この場合、ブックリストのサイズは0にする必要があります。最初のブレークポイントの結果は[link](http://i.stack.imgur.com/oArYW.png)です。 – Dar

+0

コード、tnxを投稿していただければ幸いです。 –

答えて

-2

すべてが正しく定義されているように見える、と研究の後、私はプラス、あなたの団体でそれを定義した遅延ロードを使用しない春データを行っています。

私は、デバッグビューを使用して内部を伝えるためには、実際にフェッチを行うと信じています。

関連する問題