首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从JPA存储库返回特定属性?

如何从JPA存储库返回特定属性?
EN

Stack Overflow用户
提问于 2014-10-23 12:35:31
回答 1查看 278关注 0票数 0

当将实体检索到资源时,我将获得一个ClassCastException。只有当JPA存储库语句显式指定要返回的属性时,才会发生这种情况。

例如,它工作得很好,也没有异常触发:

代码语言:javascript
复制
@Query("SELECT r FROM Rollout r, RolloutAdmin ra WHERE r.id = ra.rollout.id AND ra.admin = :admin")

它的内容如下:

代码语言:javascript
复制
select rollout0_.id as id1_8_, rollout0_.version as version2_8_, rollout0_.bts_nb_all as bts_nb_a3_8_, rollout0_.country_id as country_9_8_, rollout0_.creation_datetime as creation4_8_, rollout0_.description as descript5_8_, rollout0_.end_datetime as end_date6_8_, rollout0_.name as name7_8_, rollout0_.operator_id as operato10_8_, rollout0_.start_datetime as start_da8_8_ from rollout rollout0_ cross join rollout_admin rolloutadm1_ where rollout0_.id=rolloutadm1_.rollout_id and rolloutadm1_.admin_id=1 order by rollout0_.name asc limit 10;

但这触发了例外情况:

代码语言:javascript
复制
@Query("SELECT DISTINCT r.id, r.country, r.operator, r.name, r.description, r.creationDatetime, r.startDatetime, r.endDatetime FROM Rollout r, RolloutAdmin ra, BTS b WHERE b.rollout.id = r.id AND r.id = ra.rollout.id AND ra.admin = :admin GROUP BY r.id")

它的内容如下:

代码语言:javascript
复制
select distinct rollout0_.id as col_0_0_, rollout0_.country_id as col_1_0_, rollout0_.operator_id as col_2_0_, rollout0_.name as col_3_0_, rollout0_.description as col_4_0_, rollout0_.creation_datetime as col_5_0_, rollout0_.start_datetime as col_6_0_, rollout0_.end_datetime as col_7_0_, country3_.id as id1_4_0_, operator4_.id as id1_6_1_, country3_.version as version2_4_0_, country3_.code as code3_4_0_, country3_.list_order as list_ord4_4_0_, country3_.name as name5_4_0_, operator4_.version as version2_6_1_, operator4_.country_id as country_9_6_1_, operator4_.description as descript3_6_1_, operator4_.image as image4_6_1_, operator4_.messenger as messenge5_6_1_, operator4_.name as name6_6_1_, operator4_.operator_id as operator7_6_1_, operator4_.url as url8_6_1_ from rollout rollout0_ inner join country country3_ on rollout0_.country_id=country3_.id inner join operator operator4_ on rollout0_.operator_id=operator4_.id cross join rollout_admin rolloutadm1_ cross join bts bts2_ where bts2_.rollout_id=rollout0_.id and rollout0_.id=rolloutadm1_.rollout_id and rolloutadm1_.admin_id=1 group by rollout0_.id order by rollout0_.name asc limit 10;

为什么会有这么大的差别?有什么方法可以指定要返回的属性而不获取整个依赖的父属性?

编辑:多亏了Nizet,我现在明白了,我需要返回与我的存储库方法相同类型的对象。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-25 12:32:24

很简单:

代码语言:javascript
复制
SELECT r FROM Rollout r

意思:我希望这个查询返回r,类型为Rollout。查询返回一个List<Rollout>

鉴于

代码语言:javascript
复制
SELECT DISTINCT r.id, r.country, r.operator, r.name, r.description, r.creationDatetime, r.startDatetime, r.endDatetime FROM Rollout r

意思:我希望这个查询返回许多不同的东西:ID、国家、操作符等等。因为查询返回许多不同类型的东西,而且可能来自几个不同的实体(在这个特定示例中不是这样,但也可以从ra返回属性),查询返回一个List<Object[]>,其中对象数组的第一个元素是ID,第二个元素是country,第三个是运算符,等等。

并不是说您的第一个查询也比它应该的更复杂。这两个实体之间的关联已经说明了这两个实体是如何连接的。所以你所需要的就是

代码语言:javascript
复制
SELECT r FROM RolloutAdmin ra join ra.rollout r WHERE ra.admin = :admin
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26528229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档