【问题标题】:JPA EntityManager TypedQuery -- Return a Different Class (ViewModel/DTO) than entity model?JPA EntityManager TypedQuery - 返回与实体模型不同的类(ViewModel/DTO)?
【发布时间】:2013-01-29 04:00:38
【问题描述】:

来自实体框架背景,我可以将我的 ORM 结果转换为包含完整后端模型数据子集的类。

我有一个 JAX-RS REST 服务,我通常会返回类似的东西

MyEntity result = em.createQuery(select e from MyEntity e ... blah blah blah).

我知道我能做到:

Object result = em.createQuery(select e.Title, e.Version, e.Date from MyEntity e... blah blah blah).

但是我可以: 将我的结果转换为单独的类或 B 在我的 createquery 中命名我的字段,以便在返回我的 JSON 时命名它们?

例如在 .Net Land 中,我可以做类似的事情......

(select new {Title = e.Title, Version = e.Version}) 

然后将其转换为另一种类型。我尝试使用 typedquery 和强制转换,但出现“Type X 与返回类型 Y 不兼容”类型错误。

我的目标是返回我的信息的特定子集(视图模型/ DTO)以供在特定场景中使用。

例如,我的模型很大,我不想每次都返回大量数据。

【问题讨论】:

    标签: jpa entitymanager


    【解决方案1】:

    是的,可以使用 JPA 构造函数表达式(即 NEW 关键字)创建非实体类型:

    List<DTO> dtos = em.createQuery("SELECT NEW com.example.DTO( o.title, o.version) FROM Entity o").getResultList();
    

    DTO 必须有一个包含所有相关字段的构造函数。

    不需要强制转换。

    【讨论】:

      猜你喜欢
      • 2022-01-12
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 2019-03-30
      • 2016-11-08
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      相关资源
      最近更新 更多