2016-12-19 5 views
0

私は遅延ロードされている2つの子エンティティを持つ親エンティティを持っています。親エンティティは、ダイナミッククエリを使用して、著者のファーストネームに基づいて春データロードすべての遅延初期化された子テーブル親から

@Entity 
public class Author { 
    @Id 
    @GeneratedValue 
    private Long id; 
    private String firstName; 
    private String lastName; 

    @OneToMany(mappedBy ="author",cascade= CascadeType.ALL,fetch=FetchType.LAZY) 
    private List<Post> posts; 

    @OneToMany(mappedBy ="author",cascade= CascadeType.ALL,fetch=FetchType.LAZY) 
    private List<Book> books; 
} 

ロードすべての書籍や記事にロードされたとき、私は、関連するすべての子エンティティをロードしたいと思います。

public interface AuthorRepository extends CrudRepository<Author, Long> { 
     public List<Author>findByFirstNameAndPostsAndBooks() 
    } 

上記のFindbyは機能しません。正しいクエリを構築するために私を助けてください。 はまた、私はあなたがこれに照会変更する必要があります彼らのファーストネームで著者をフェッチするには

答えて

1

を当分の間@queryまたはQueryDSLを避けるためにしようとしています:

public List<Author>findByFirstName(String firstname); 

JPAがあるため、自動的に著者postsbooksをロードしますAuthorクラスの@OneToMany注釈の

application.propertiesファイルにspring.jpa.properties.hibernate.enable_lazy_load_no_trans=tr‌​ueを追加すると、トランザクションアノテーションなしで遅延読み込みが有効になります。

+0

でも、FetchType Lazyは、私のCRUDリポジトリにfindByPostsTitleというクエリを持っているときに動作します。子テーブルにはwhere句があります。私の問題は、春のデータ動的クエリを使用して子テーブル上の任意の句を指定せずに著者のファーストネームですべての投稿と書籍をロードしたいのですか? – onlinejava

+0

@onlinecarrenあなたはこのような意味ですか? 'public List findByFirstName(String firstname);'これはすべての著者を名前で取得し、jpaは '@ OneToMany'アノテーションのために彼のすべての投稿と書籍を提供します。 – Patrick

+0

私はパフォーマンスの理由のために必要がない限り私は子テーブルによってロードしたくないので、怠惰な初期化に固執したいと思います – onlinejava

関連する問題