繁体   English   中英

“选择新构造函数”查询返回 java.lang.Object 而不是构造函数实例 class

[英]“select new constructor” query returns java.lang.Object instead of instance of constructors class

var toShow是纯java.lang.Object的实例,如果我将其转换为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;
}

我尝试过的:

  • Faction.class .createQuery或将其删除
  • 将方法.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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM