@Query返回Object而不是实体

use*_*507 6 jpa java-ee spring-data

当我在选择字段中使用@Query注释时,我没有得到实体对象.我怎样才能获得实体对象?

public interface CreditCenterRepository extends JpaRepository<CreditCenter, Long> {
    @Query("SELECT CC.id, CC.loanId, CC.clientId FROM CreditCenter CC")
    List<CreditCenter> findAllIds();
}
Run Code Online (Sandbox Code Playgroud)

当我从我的控制器调用此方法时,它不会抛出任何错误,但是,当我尝试迭代它时抛出classcastexception

List<CreditCenter> objects = findAllIds();
for (CreditCenter cc : objects) { //This line throws ClassCastException
    //some logic
}
Run Code Online (Sandbox Code Playgroud)

Koi*_*oer 10

好吧您似乎正在实体CreditCenter上使用投影

@Query("SELECT CC.id, CC.loanId, CC.clientId FROM CreditCenter CC")
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是:为什么你不使用这样的东西.

 @Query("SELECT CC FROM CreditCenter CC")
Run Code Online (Sandbox Code Playgroud)

这将返回实体列表,但可能你不想返回所有字段,所以我的第二个建议是使用此查询.

@Query("SELECT new package.to.CreditCenter(CC.id, CC.loanId, CC.clientId) FROM CreditCenter CC")
Run Code Online (Sandbox Code Playgroud)

并在Creditcenter中添加一个支持参数顺序和类型的构造函数.这将使用JPQL和jpa repos使用它应该工作.

public class CreditCenter {

 //Member vars
 public CreditCenter (int id, int loadid, int clientid){...}
}
Run Code Online (Sandbox Code Playgroud)