使用非@Id

时间:2019-02-14 18:45:04

标签: java spring-boot jpa-2.0

我想知道是否可以在不使用@Query批注的情况下创建JPA来从我正在查询的对象内部的对象的属性中获取结果。

我能够很好地列出findAllById(Long id),但是我想知道的是是否有可能进行类似的查询,以查找该类内对象的属性,例如域如下:

public class OcorrenciaParticipante
    @Id
    @Column(name = "cod_ocorrencia_participante")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long codigo;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "cod_ocorrencia", referencedColumnName = "cod_ocorrencia")
    private Ocorrencia ocorrencia;

public class Ocorrencia 
    @Id
    @Column(name = "cod_ocorrencia")
    private Long codigo;

我想要写的是类似List<OcorrenciaParticipante> findAllByOcorrencia的东西,以使用Ocorrencia类中的codigo属性来获得OcorrenciaParticipante的列表。

执行上述操作并调用端点传递变量codigo的值时,出现异常:

java.lang.IllegalArgumentException: Parameter value [1] did not match expected type [project.model.oc.Ocorrencia (n/a)]

我已经尝试使用此处的信息https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repository-query-keywords

有可能吗?

1 个答案:

答案 0 :(得分:1)

我认为您只需要在存储库方法签名中包括嵌套属性:

List<OcorrenciaParticipante> findAllByOcorrenciaCodigo

春季文档:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-property-expressions

有更多讨论的类似问题:Spring Data JPA find by embedded object property