【发布时间】:2018-06-06 03:39:49
【问题描述】:
我正在使用 Java 和 MySql 在后端 API 中工作,我正在尝试使用 JPA 2.1 中的 @SqlResultSetMapping 将一对多本机查询结果映射到 POJO 类,这是本机查询:
@NamedNativeQuery(name = "User.getAll”, query = "SELECT DISTINCT t1.ID, t1.RELIGION_ID t1.gender,t1.NAME,t1.CITY_ID , t2.question_id, t2.answer_id FROM user_table t1 inner join user_answer_table t2 on t1.ID = t2.User_ID“,resultSetMapping="userMapping")
还有,这是我的结果 SQL 映射:
@SqlResultSetMapping(
name = "userMapping",
classes = {
@ConstructorResult(
targetClass = MiniUser.class,
columns = {
@ColumnResult(name = "id"),
@ColumnResult(name = "religion_id"),
@ColumnResult(name = "gender"),
@ColumnResult(name = "answers"),
@ColumnResult(name = "name"),
@ColumnResult(name = "city_id")
}
),
@ConstructorResult(
targetClass = MiniUserAnswer.class,
columns = {
@ColumnResult(name = "question_id"),
@ColumnResult(name = "answer_id")
}
)
})
而且,这里是 POJO 类的实现:(我刚刚删除了构造函数和 getter/setter)
MiniUser 类
public class MiniUser {
String id;
String religionId;
Gender gender;
List<MiniUserAnswer> answers;
String name;
String city_id;
}
和 MiniUserAnswer 类
public class MiniUserAnswer {
String questionId;
String answerId;
}
我的目标是执行此查询并返回MiniUser 的列表,并在每个MiniUser 中:他的“答案”列表,即MiniUserAnswer 的列表。
运行这段代码后,我得到了这个错误:
The column result [answers] was not found in the results of the query.
我知道为什么,因为查询选择语句中没有“答案”字段。
那么,考虑到性能,我怎样才能完成这样的事情呢?此答案列表可能达到 100 个。
非常感谢您的帮助,在此先感谢!
【问题讨论】:
-
请问有什么答案吗?我想做什么可行吗?
标签: one-to-many jpa-2.1 nativequery sqlresultsetmapping