JPA EntityManager TypedQuery——返回与实体模型不同的类(ViewModel/DTO)?
来自实体框架背景,我可以将ORM结果转换为包含完整后端模型数据子集的类 我有一个JAX-RSREST服务,我通常会在其中返回如下内容JPA EntityManager TypedQuery——返回与实体模型不同的类(ViewModel/DTO)?,jpa,entitymanager,Jpa,Entitymanager,来自实体框架背景,我可以将ORM结果转换为包含完整后端模型数据子集的类 我有一个JAX-RSREST服务,我通常会在其中返回如下内容 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
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名称,以便在返回JSON时命名我的createquery中的字段
例如,在.NETLand中,我可以做一些类似于
(select new {Title = e.Title, Version = e.Version})
然后将其转换为另一种类型。我尝试使用typedquery和casting,但得到一个类型X与返回类型Y不兼容的类型错误
我的目标是返回我的信息的特定子集视图模型/DTOof,以便在特定场景中使用
例如,我的模型非常庞大,我不想每次都返回大量数据。是的,可以使用JPA构造函数表达式创建非实体类型,即NEW关键字: DTO必须有一个包含所有相关字段的构造函数 不需要铸造
List<DTO> dtos = em.createQuery("SELECT NEW com.example.DTO( o.title, o.version) FROM Entity o").getResultList();