当将实体检索到资源时,我将获得一个ClassCastException。只有当JPA存储库语句显式指定要返回的属性时,才会发生这种情况。
例如,它工作得很好,也没有异常触发:
@Query("SELECT r FROM Rollout r, RolloutAdmin ra WHERE r.id = ra.rollout.id AND ra.admin = :admin")它的内容如下:
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;但这触发了例外情况:
@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")它的内容如下:
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,我现在明白了,我需要返回与我的存储库方法相同类型的对象。
发布于 2014-10-25 12:32:24
很简单:
SELECT r FROM Rollout r意思:我希望这个查询返回r,类型为Rollout。查询返回一个List<Rollout>。
鉴于
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,第三个是运算符,等等。
并不是说您的第一个查询也比它应该的更复杂。这两个实体之间的关联已经说明了这两个实体是如何连接的。所以你所需要的就是
SELECT r FROM RolloutAdmin ra join ra.rollout r WHERE ra.admin = :adminhttps://stackoverflow.com/questions/26528229
复制相似问题