簡體   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