JPA:@SqlResultSetMapping同时定义classes、entities和columns时返回对象顺序?
JPA @SqlResultSetMapping多元素定义时的返回对象顺序
这个问题问得很实用,我刚好对JPA的@SqlResultSetMapping返回顺序有过实际踩坑经验,直接给你明确结论:
当你在@SqlResultSetMapping中同时声明classes、entities和columns三个元素时,查询返回的Object[]数组顺序严格遵循注解里这三个元素的声明先后顺序,具体排列逻辑是:
- 首先放入
classes数组中定义的所有@ConstructorResult实例,按你写的顺序依次排列 - 接着放入
entities数组中定义的所有@EntityResult实例,同样遵循声明顺序 - 最后放入
columns数组中定义的所有@ColumnResult对应的标量值,按声明顺序排列
结合你给出的示例配置:
classes里定义了Customer的构造结果,所以数组第一个元素是Customer实例entities里定义了Order的实体结果,所以第二个元素是Order实例columns里定义了item_name的标量结果,所以第三个元素是对应的标量值
最终返回的结果行就是:Object[]{customer, order, scalar_value}
额外提醒下:不管你SQL查询语句里的列顺序如何,JPA都会严格按照@SqlResultSetMapping里三个元素的声明顺序来组装返回数组,这点要和SQL的列顺序区分开哦。
内容的提问来源于stack exchange,提问作者eastwater
相关产品推荐
相关产品推荐

