我在使用entityManager对象返回查询结果集时遇到问题。 我想返回我的联接查询,该查询应转换为pojo对象。
因此,经过多次尝试,我发现了下面的工作代码
public List<Test> getData() {
Query a = entityManager.createNativeQuery("select t1.data1,t2.data2 from test1 t1 join test2 t2 on t1.id = t2.id");
a.unwrap(SQLQuery.class)
.addScalar("data1", LongType.INSTANCE)
.addScalar("data2", DoubleType.INSTANCE)
.setResultTransformer(Transformers.aliasToBean(Test.class));
return a.getResultList();
}
但是我警告过setResultTransformer()
和addScalar()
方法已过时。
可以请其他人输入替代代码还是提供解决方案。
谢谢。
答案 0 :(得分:1)
1)不赞成使用的第一件事是SQLQuery
:
(从5.2开始)改用
NativeQuery
。
2)但这不能解决您的问题,因为SQLQuery.addScalar()
org.hibernate.query.Query.setResultTransformer()
也被弃用了。
From the Hibernate 5.3 migration guide:
使用ResultTransformer可以定义a的结果 查询应进行处理,即可以用来更改查询的“形状” 查询结果。
在Hibernate 6.0中,ResultTransformer将被替换为 @FunctionalInterface,因此,setResultTransformer() org.hibernate.query.Query中的方法已过时。
在Hibernate 5.3中无法替代ResultTransformer, 因此,按照此处的建议,目前可以原样使用。
因此,您可以保留它,并通过添加TODO
注释来抑制警告。
@SuppressWarnings("deprecation")
public List<Test> getData() {
Query a = entityManager.createNativeQuery(
"select t1.data1,t2.data2 >from test1 t1 join test2 t2 on t1.id = t2.id");
a.unwrap(NativeQuery.class)
// TODO warning to remove with Hibernate 6 for addScalar()
.addScalar("data1", LongType.INSTANCE)
.addScalar("data2", DoubleType.INSTANCE)
// TODO warning to remove with Hibernate 6 for setResultTransformer()
.setResultTransformer(Transformers.aliasToBean(Test.class));
return a.getResultList();
}