如何从具有外键类型的JPA存储库中返回选择查询

时间:2019-01-18 14:18:18

标签: java spring hibernate spring-data-jpa

我正在尝试这样做:

@Query(value = "SELECT DISTINCT c.* FROM comarca c INNER JOIN debito_negativacao d ON d.comarca_id = c.id WHERE d.status = :status", nativeQuery = true)
List<Comarca> findDistinctComarcaByStatus(@Param("status") String status);

但是我得到这个错误:

  org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.Object[]] to type [com.hc.projects.model.Comarca] for value '{9, 0, 7323}'; nested exception is org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.math.BigInteger] to type [com.hc.projects.model.Comarca]

4 个答案:

答案 0 :(得分:0)

您必须返回构造Comarca所需的所有列。因此,您将必须加入表格。

由于没有提供表格,我只能猜测:

@Query(value = "SELECT DISTINCT * FROM comarca c " +
                "JOIN debito_negativacao d ON d.comarca_id = c.id "+
                "WHERE d.debito_negativacao.status= :status", nativeQuery = true)
List<Comarca> findDistinctComarcaIdByStatus(@Param("status") String status);

答案 1 :(得分:0)

您的请求告诉您需要BigInteger的列表:SELECT DISTINCT comarca_id ... 因为我猜comarca_id是biginteger。 如果您需要Comarca列表,则必须在所有桌子上提出​​要求。

答案 2 :(得分:0)

如果您要使用一个独特的查询,该查询将返回不同于该独特的查询的其他列,则需要某种策略来“合并”对象。想象这样的行:

------------------------------
| comarca_id| key | status    |
| 1         | A   | your_state|
| 1         | B   | your_state|
| 2         | C   | your_state|
------------------------------

在这种情况下您会得到什么?

SELECT DISTINCT comarca_id FROM comarca;将返回1,2

但是,如何合并两个(或多个)具有相同comarca_idstatus的条目?

这给您留下了三种情况:

  1. 您假设comarca_id + status是唯一的->您不需要DISTINCT查询
  2. comarca_idstatus可能有不止一排->您无法使查询与众不同
  3. 您只希望使用不同的comarca_id值->使您的方法返回List<BigInteger>

答案 3 :(得分:0)

如果第二次要隔离comarca_id列表,请尝试流式传输请求结果。

    List<Comarca> comarca = debitoNegativacao.stream().map(dn -> dn.getComarca()).distinct().collect(Collectors.toList());

++