如图,jpql内的查询结果只能是query标签内的实体吗?
可否如下图,返回一个自定义的非持久化的实体.
另外,可否将jpql查询出来的某个字段经过一段逻辑处理后,再给个名字塞到返回实体里?仅仅在jpql中进行的聚合等基础操作无法满足我的需求.
ps:
- 我已知视图可以指定返回属性,但是我想查询的属性在我自定义的对象里返回.
- 我已知调用service可以在查询后对字段进行自定义逻辑处理并返回,但是rest接口调用service就没有分页了,我需要像调用query一样,具备分页功能.
以上 
如图,jpql内的查询结果只能是query标签内的实体吗?
可否如下图,返回一个自定义的非持久化的实体.
另外,可否将jpql查询出来的某个字段经过一段逻辑处理后,再给个名字塞到返回实体里?仅仅在jpql中进行的聚合等基础操作无法满足我的需求.
ps:
以上 
你好,
JPA 是支持在查询语句中 new 一个新的实体。参考这里:https://www.objectdb.com/java/jpa/query/jpql/select
但是我不确定CUBA 的RestAPI 封装是否支持这种用法,你可以先试试,有问题再沟通。
首先我用RestAPI是不行的,
其次,我尝试在service中使用dataManager加载数据,将cubarest_TblCallRecords实体的数据进行一定聚合操作后,加载到非持久对象RecordStatictis种,代码如下:
LoadContext<RecordStatictis> context = LoadContext.create(RecordStatictis.class)
.setQuery(LoadContext.createQuery("SELECT NEW com.voiceai.cubarest.entity.business.RecordStatictis(SUM(IF(gender=1,1,0)),SUM(IF(gender=1,0,1)))" +
List<RecordStatictis> list = dataManager.loadList(context);
list.forEach(System.out::println);
cubarest_TblCallRecords实体:
RecordStatictis元数据:
但是查询出来的结果为空:
请帮忙确认下是否我的操作方式有误,还是此方式不支持,
另外,将数据库的内容进行多种分组,聚合等操作后拿到业务层是我的刚需(数据量较大,不可能全部拿过来在业务层处理),所以如果我的方式不行请告知下是否有其他迂回的办法.感谢~
你好,
如果你能提供一个简单测试项目,我们可以帮你确认一下上面的问题。
另外,如果是简单的汇总查询,可使用 DataManager.loadValues方法,参考这里
loadValues(ValueLoadContext)- 加载键值对列表。该方法接受ValueLoadContext,定义纯数值的查询语句和键值列表。返回包含KeyValueEntity实例的列表。例如:
看看能否满足需求。
你好,我尝试使用了dateManager和entityManager之后,发现entityManager可以返回结果,dataManager不行,不知是否原因如下:

单元测试文件地址:
https://github.com/Wjcccccccccc/cuba-singleNode/blob/master/modules/core/test/com/voiceai/cubarest/core/RecordServiceBeanTest.java
另外:
我将cuba平台升级到7.2.4之后测试,发现调用EntityManager非常慢,并且后面的日志都不输出了,回滚到7.2.3就好了(具体调用请参看我上述测试文件地址),感觉像是个Bug.