&引用;选择“新建构造函数”;查询返回java.lang.Object而不是构造函数类的实例

&引用;选择“新建构造函数”;查询返回java.lang.Object而不是构造函数类的实例,java,hibernate,jpa,jpql,entitymanager,Java,Hibernate,Jpa,Jpql,Entitymanager,vartoShow是纯java.lang.Object的实例,如果我将其转换为java.lang,它是唯一有效的方法,我认为这不是正确的方法。我的方法: public FactionProjection getFactionById(int id){ Query query = entityManager.createQuery( "SELECT new com.gamerecords.result_recorder.model.projection.F

var
toShow
是纯
java.lang.Object
的实例,如果我将其转换为
java.lang
,它是唯一有效的方法,我认为这不是正确的方法。我的方法:

    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
    的第二个参数更改为
    派系.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不会返回您期望的对象的确切类型,您需要强制转换
Query#getSingleResult()
返回一个
对象
。您可以改用
TypedQuery

TypedQuery<FactionProjection> query;
var result= query.getSingleResult();
TypedQuery;
var result=query.getSingleResult();