【问题标题】:How to map native query result into custom class object?如何将本机查询结果映射到自定义类对象?
【发布时间】:2020-04-02 18:32:16
【问题描述】:

我有三个类:Lending、LendingReturn 和 ProductLending。

借贷

@Entity
public class Lending implements Serializable {

@Id
private Long id;

private BigDecimal amount;

private Instant createdDate;

private User lender;

private ProductLending productLending;

}

贷款回报

@Entity
public class LendingReturn implements Serializable {

@Id
private Long id;

private BigDecimal amount;

private Instant createdDate;
}

产品借贷

@Entity
public class ProductLending implements Serializable {

    @Id
    private Long id;

    private String title;
}

以下是我的原生查询。我想查询然后将结果映射到好的映射列表中

Query query = em.createNativeQuery("select l.id, pl.title, sum(lr.amount)+l.amount as total_return, " +
                                            "(select amount as yesterday_return from lending_return where lending_id=l.id and date(created_date)=current_date-2), " +
                                            "l.period_in_day-(current_date-date(l.created_date)) as mature_in_day " +
                                            "from lending_return lr right join lending l on lr.lending_id=l.id " +
                                        "join product_lending pl on l.product_lending_id=pl.id " +
                                        "where l.lender_id=:lenderId " +
                                        "group by l.id, pl.title, l.amount");

    query.setParameter("lenderId", userService.getLoggedInUser().getId());
    List<Object[]> resultList = query.getResultList();

所以查询返回列:id、title、total_return、昨天_return

那么 resultList 包含:

[
  [
    2804,
    "Title 1",
    1001800,
    600,
    24
  ],
  [
    2809,
    "Title 2",
    null,
    null,
    28
  ]
]

如何映射 resultList 以使结果如下所示?

[
  {
    "id": 2804,
    "title": "Title 1",
    "total_return": 1001800,
    "yesterday_return": 600,
    "mature_in_day": 24
  },
  {
    "id": 2809,
    "title": "Title 2",
    "total_return": null,
    "yesterday_return": null,
    "mature_in_day": 28
  }
]

【问题讨论】:

标签: java hibernate jpa nativequery


【解决方案1】:

您需要手动映射:

public String map(ResultSet rs) throws Exception {
        Lending lend = new Lending ();
            lend.setId( rs.getLong("id"));
        // complete all columns 
        return lend;
    }

然后调用你需要的方法。

【讨论】:

    猜你喜欢
    • 2020-08-17
    • 2012-04-28
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 2018-06-06
    • 2019-05-23
    • 2014-02-11
    相关资源
    最近更新 更多