2017-08-08 132 views
-1

我有一个默认的弹簧web MVC应用程序,我使用JPA和有时需要创建某种总结视图页面,例如:我有三个对象(在我的情况下,我有很多)House,Car and Person在这个例子中,房子有车辆和人员,所以在我的页面视图,我需要做的是这样JPA什么是获取摘要对象的最佳方式?

House 1: 5 Cars, 6 Persons 
House 2: 3 Cars, 3 Persons 
House 3: 6 Cars, 2 Persons etc... 

我想使用本机查询,因为我非常良好的SQL查询,所以没有但是JPA没有像String的MAP那样返回的东西,我对JPA的性能一无所知。

+0

我投票结束此问题,因为该要求已在[官方JPA文档](http://docs.oracle.com/html/E13946_04/ejb3_langref.html)中解决。 – manish

+0

因此,我们可能不需要询问官方文档中已经存在的内容,但我认为几乎所有文档都记录在文档中,问题是:我在stackoverflow中搜索它(因为我有一些偏执狂,我认为一切都在这里)我没有找到类似的问题或答案,所以我问。我做得不好? –

回答

0

JPA查询

SELECT 
    h 
    , COUNT(c) 
    , COUNT(p) 
FROM 
    House h 
LEFT JOIN 
    h.cars c 
LEFT JOIN 
    h.persons p 
GROUP BY 
    h 

可以为entityManager.createQuery(query).getResultList()执行得到List<Object[]>

List的每个元素将是一个由三个值组成的数组(对应于SELECT子句中的三个值)。第一个值将是类型House(由于SELECT h),而第二个和第三个将是Long类型。

由于从JPQL到SQL的转换非常快,查询性能与运行来自同一应用程序的本机查询并没有太大的区别。

相关问题