java - “选择新构造函数”查询返回 java.lang.Object 而不是构造函数类的实例
问题描述
vartoShow
是 pure 的实例,java.lang.Object
如果我将它转换为 var ,它的唯一工作方式FactionProjection
,我认为这不是正确的方式。我的方法:
public FactionProjection getFactionById(int id){
Query query = entityManager.createQuery(
"SELECT new com.gamerecords.result_recorder.model.projection.FactionProjection(f.name)" +
"FROM Faction f WHERE f.id = :id",FactionProjection.class)
.setParameter("id",id);
var toShow = query.getSingleResult();
return toShow;
}
构造函数:
public FactionProjection(String name) {
this.name = name;
}
我尝试过的:
- 更改
.createQuery
to的第二个参数Faction.class
,或删除它 - 将方法更改
.getSingleResult()
为.getResultList()
我现在的工作代码是:
public FactionProjection getFactionById(int id){
Query query = entityManager.createQuery(
"SELECT new com.gamerecords.result_recorder.model.projection.FactionProjection(f.name)" +
" FROM Faction f WHERE f.id = :id",FactionProjection.class)
.setParameter("id",id);
var toShow = (FactionProjection)query.getSingleResult();
return toShow;
}
我见过很多“选择新构造函数”表达式的例子,并且不需要强制转换,这让我觉得我在这里犯了一个错误。
解决方案
普通的查询 API 不会返回您期望的确切类型的 Object 并且您需要强制转换。Query#getSingleResult()
返回一个Object
. 您可以TypedQuery<T>
改用:
TypedQuery<FactionProjection> query;
var result= query.getSingleResult();
推荐阅读
- debugging - 如何在插入之前获取.ko模块的加载地址?
- node.js - rados_clone_range返回的-95错误码是什么意思?
- scala - 等到主管准备好再执行测试
- azure - 使用 Azure 通过 URL 呈现 MP3 文件
- django - Django 批准的评论
- php - 通过 PHP 脚本从目录中获取所有文件名
- php - 用正则表达式 (regex) 和 php 将两个组合的字母替换为相同的字母和中间的空格
- ios - 如何快速制作按钮中的圆形图像?
- android - 将 Int-List 绑定到视图(已在绑定的外部回收器视图中)
- bitbucket-api - 获取 BitBucket 拉取请求,仅 ID