如何将@EntityGraph注释分配给Spring Data JPA存储库.findAll()

时间:2015-04-23 13:18:27

标签: spring-data-jpa

使用findAll()注释Spring Data JPA存储库方法@EntityGraph

import org.springframework.data.jpa.repository.JpaRepository;
[...]

public interface OptgrpRepository extends JpaRepository<Optgrp> {

@EntityGraph(value = "Optgrp.sysoptions")
List<Optgrp> findAll();

}

导致出现此错误消息:

org.springframework.data.mapping.PropertyReferenceException: No property findAll found for type Optgrp!

findAll()更改为其他名称时会发生同样的错误:

findAllWithDetail() - &gt; No property findAllWithDetail found for type Optgrp!

findWithDetailAll() - &gt; No property findWithDetailAll found for type Optgrp!

问题:是否可以在查找所有实体的Spring Data JPA存储库方法上使用@EntityGraph注释?

编辑:正如评论中所述,这是Optgrp实体类的摘录:

@Entity
@NamedEntityGraph(name = "Optgrp.sysoptions", attributeNodes = @NamedAttributeNode("sysoptions"))
public class Optgrp implements Serializable {
    [...]
    @OneToMany(mappedBy="optgrp", cascade = CascadeType.ALL, orphanRemoval=true)
    @OrderBy(clause = "ordnr ASC")
    private List<Sysoption> sysoptions = new ArrayList<>();
}

还有Sysoption实体类:

@Entity
public class Sysoption implements Serializable {
[...]
    @ManyToOne
    @JoinColumn(name = "optgrp_id", insertable=false, updatable=false)
    private Optgrp optgrp;
}

2 个答案:

答案 0 :(得分:3)

使用名称findByIdNotNull是将findAll()和实体图组合在一起的一种方法:

@EntityGraph(value = "Optgrp.sysoptions")
List<Optgrp> findByIdNotNull();

答案 1 :(得分:3)

对于所有也在使用Stack Overflow作为知识数据库的人,我记录了Markus Pscheidts挑战的新状态。三年零六个月后,{Marks}最初期望@EntityGraph注释现在可以直接在Spring Data findAll()的{​​{1}}函数中运行。

JpaRepository

测试中使用的版本:Spring Boot 2.0.3.RELEASE,其中包含spring-boot-starter-data-jpa。