首页 > 解决方案 > 为什么 Spring 的 @Query 注解返回 Object 类型?

问题描述

我有以下查询来从数据库中获取实体/表的特定列

@Query("SELECT u.email, u.password FROM User u WHERE email = :email")
Optional<User> getCredentialsByEmail( @Param("email") String email);

但这给出了ClassCastException, 那是因为查询返回Object类型而不是User.

然而,如果我选择如下所有列:

@Query("SELECT u FROM User u WHERE email = :email")
Optional<User> getCredentialsByEmail( @Param("email") String email);

查询返回正确的类类型,即User。我不明白为什么 Spring 框架会提供这种差异。

请有任何建议。

标签: spring-bootspring-data-jpa

解决方案


如果您只需要几列,则可以使用Object[]对象数组

@Query("SELECT u.email, u.password FROM User u WHERE email = :email")
Optional<Object[]> getCredentialsByEmail( @Param("email") String email);

0位置你可以得到email

1位置你可以得到password

如果你想让它更清楚,请使用Interface

public interface Response {

 public String getEmail();

 public String getPAssword();

}

查询确保列名和get名称应该匹配,如果不匹配,您可以allies在查询中使用

@Query("SELECT u.email, u.password FROM User u WHERE email = :email")
Optional<Response> getCredentialsByEmail( @Param("email") String email);

推荐阅读