什么是正确的jpa查询从表中获取一些列而不是所有表数据

时间:2016-04-20 12:31:05

标签: spring jpa

我得到了这个例外

线程中的异常"线程-2" java.lang.ClassCastException:[Ljava.lang.Object;无法在java.lang.Thread.run(Thread.java:745)的com.freeGo.util.HealthTask.run(HealthTask.java:33)中转换为com.freeGo.model.Pump

我的代码是:

@Query("SELECT p.id, p.timestamp FROM Pump p WHERE p.isActive = :isActive")
 public List<Pump> findByIsActive(@Param("isActive") int isActive);

如果我不使用Query annotation作为

public List<Pump> findByIsActive(@Param("isActive") int isActive);

然后它成功运行,但它返回了所有表格数据,但我只想要2列。

我在春季3和jpa的项目。

1 个答案:

答案 0 :(得分:4)

查询没有任何问题,如果这是你想要的。您将从查询而不是List<Pump>获取对象[](对象数组)。因此,请返回类型List<Object[]>并在第0列中获取id,在第1列中获取时间。

如果你想让代码更好一点,你应该得到查询以返回自定义DTO。

@Query("SELECT new MyDto(p.id, p.timestamp) FROM Pump p WHERE p.isActive = :isActive")

并返回List<MyDto>

参考:Spring JPA selecting specific columns