spring-boot - 为什么 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 框架会提供这种差异。
请有任何建议。
解决方案
如果您只需要几列,则可以使用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);
推荐阅读
- c++ - 给快捷方式一个图标
- python - 网页抓取 Youtube 频道以获取视频列表和其他详细信息
- xslt - 需要帮助有条件地应用模板并在 XSLT 中进行排序
- html - 如何使用 curl 在获取请求中获取页面的动态值?
- docker - Azure DevOps + Docker:“apt-get”未被识别为内部或外部命令
- elixir - Releases.exs 似乎不适用于 Elixir 部署
- rsa - 在 .net core 3.1 中从 (RSA) PublicKey 手动创建 JWK
- python - 从另一个列表创建一个中文名称列表
- javascript - 是否可以使用 JS 更改 html 表单值?
- fiddler - 如何使 Fiddler HTTPS 解密与弹性应用程序一起使用?