Spring Data JPA @Query与外键:参数不匹配

时间:2019-01-02 22:49:18

标签: java spring hibernate spring-data-jpa jpql

我有一个表“ Signal”,其中包含id,volume和object_id列。

Object_id是外键。我需要检索每个具有特定object_id的信号。

我正在尝试使用此查询

public interface SignalRepository extends JpaRepository<Signal, Integer> {
    @Query("select s from Signal s where s.object = ?1")
    Optional<List<Signal>> findSignalByObjectId(Integer objectId);

}

它不起作用。如果将"?1"更改为1,它将获得硬编码值。如果我尝试查询“音量”,效果很好。

我收到此错误:

  

Blockquote   嵌套异常是java.lang.IllegalArgumentException:参数值[1]与预期类型不匹配

2 个答案:

答案 0 :(得分:1)

我建议您省略查询,并让spring数据为您生成一个。因此,您的案件可能以这种方式表示(在定义了正确的关系映射的情况下):

public interface SignalRepository extends JpaRepository<Signal, Integer> {
    Optional<Signal> findByObject(YourObjectType object);
}

如果您提供更多信息,例如您的实体-您可以获得更多帮助。

答案 1 :(得分:1)

您可以使用Spring数据来生成基础查询,如下所示:

public interface SignalRepository extends JpaRepository<Signal, Integer> {
    List<Signal> findSignalByObjectId(Integer objectId);
}

或者您可以使用以下返回类型和参数编写查询:

public interface SignalRepository extends JpaRepository<Signal, Integer> {
    @Query("select s from Signal s where s.object = :id")
    List<Signal> findSignalByObjectId(@Param("id") Integer objectId);
}