Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA EntityManager TypedQuery——返回与实体模型不同的类(ViewModel/DTO)?_Jpa_Entitymanager - Fatal编程技术网

JPA EntityManager TypedQuery——返回与实体模型不同的类(ViewModel/DTO)?

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

来自实体框架背景,我可以将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 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();