我还没有找到任何具体的解决方案:
我在Spring Data中有一个Native Query,需要将结果集映射到自定义数据bean对象。
@Query(query = "select id as activityId, activity_title as activityTitle,
activity_instructions as activityInstructions from activities_t " +
"where case when activity_code ~ '^\\d+$' " + // Digits only
" then cast(activity_code as int) between :firstId and :lastActivityId end",
resultSetMapping="myQueryResultSet",
name = "myQuery")
public List<Activity> findActivities(@Param("firstId") int firstId, @Param("lastId") int lastId);
问题是,这需要返回自定义对象Activity
,而不是@Entity对象ActivitiesT
。
Activity
是一个自定义POJO,其中包含ActivitiesT
个字段的子集,而某些列的名称略有不同:
Activity.java,3个字段,包含getter / setters
activityId (ACTIVITIES_T.ID) <-- this is differently-named
activityTitle (ACTIVITIES_T.ACTIVITY_TITLE) <-- same name
activityInstructions (ACTIVITIES_T.ACTIVITY_INSTRUCTIONS) <-- same name
我在这里找到了一个解决方案,但它对我不起作用,因为我有一个不同名字的别名: Spring Data JPA map the native query result to Non-Entity POJO
他们的解决方案是使用
@SqlResultSetMapping(
name="groupDetailsMapping",
classes={
@ConstructorResult(
targetClass=GroupDetails.class,
columns={
@ColumnResult(name="GROUP_ID"),
@ColumnResult(name="USER_ID")
}
)
}
)
他们在答案中假设自定义POJO中的所有列都与预期的@Entity对象中的列相同。对我来说并非如此。另外,我不能在我的Spring Data JPA Repository方法上放置SqlResultSetMapping。
对此有何解决方案?