当前位置: 首页 > 知识库问答 >
问题:

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

易成天
2023-03-14

来自实体框架后台,我可以将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).

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

例如,在.NET领域,我可以做一些类似于....

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

然后将其转换为其他类型。我尝试使用typedquery和强制转换,但得到一个“类型X与返回类型Y不兼容”类型错误。

共有1个答案

左劲
2023-03-14

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

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

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

不需要选角。

 类似资料:
  • 我有一个使用泽西和MOXy的JAX-RS服务。我有一个处理程序,它返回类型的JSON或XML(取决于标头)表示,但是如果没有找到该项目,它应该返回一个404错误不同的类型。 在第一种情况下(返回Memo),它可以正常工作,但在第二种情况下(抛出带有MemoError实体的WebApplication ationExcture)则不能正常工作。 如果我将处理程序更改为返回一个,则第二种情况确实有效(

  • 问题内容: 我正在玩Go,发现一个我无法解决的问题。假设我有如下代码: 我导入了软件包并开始使用它: 我真的很喜欢我的助手“运行”,但是我想使其更加慷慨:我不希望人们总是向我传递MySQL客户端。可以是具有“ RunQuery”和“ Result”方法的任何东西。所以我尝试使用接口: 可悲的是,这不再编译了。我收到此错误: Go不支持此功能吗,或者我做错了什么? 问题答案: 应该返回接口,否则你总

  • 这是一个面向对象设计模式专家的问题。 假设我有一个类,负责读取/解析数据流(携带不同类型的信息包)。每个数据包都携带不同类型的信息,因此理想情况下,我会为每种类型的数据包创建一个类(,,…每个都有自己的接口)。 然后,方法将遍历流,并将类(或指向类的指针或引用)返回到相应的包类型。 你会用空指针吗?一个泛型类()可以提供一个公共(部分)接口来查询数据包的类型(这样就可以在运行时做出任何决定),怎么

  • (Spring的@CachePut注释是否适用于void返回类型?) 我遇到了同样的问题 因为这个问题已经存在很长时间了,我不知道是否有解决办法 创建缓存: 使用@CachePut更新此缓存 输出: 我搜索了几天信息,但没有找到答案 除了使用@CacheEvict(cacheNames=userCache,allEntry=true) 有没有办法用@Cacheable和@CachePut解决? 非

  • 我想基于泛型值返回不同的类型。例如: 但我有一个错误: 类型字符串[]不能分配给类型T扩展Base?String[]:字符串

  • 请原谅稍微不完整的代码,当我遇到这个问题时,我正在重组它。其要点是,在调用中,编译器表示/*Here*/的地方,编译器强制使用类型,但是当返回时,我希望通过返回204来处理,否则我希望返回200。我怎么才能做到? 理想情况下,我可以在map调用中检查它是否是mono.empty(),但如果它是空的mono,它似乎不会输入map。想过使用optionals,但它们似乎不能很好地使用单音。