[英]Running a nativeQuery in a loop doesn't return correct data
我试图在循环中运行本机查询,查询显示正确的SQL语法,但输出始终相同。
for (int i=0; i<translations.size(); i++) {
Query query = entityManager.createNativeQuery("Select * from " + translations.get(i).getName(), MyModel.class);
rows = (List<MyModel>)query.getResultList();
// rest of the function...
}
现在在控制台中我可以看到Hibernate语句如:
Hibernate: Select * from translation1
Hibernate: Select * from translation2
Hibernate: Select * from translation3
但变量“rows”总是包含第一个select语句的结果,即translation1表的行。
任何想法为什么在控制台中它显示它也从其他表中选择但实际上它总是从translation1表获取数据?
如果所有表都具有相同的id组,则它是预期的行为。
Hibernate会话高速缓存保证在会话中只有一个特定类型的实体的实例具有特定的id。 由于即使在本机查询的情况下,实体也是通过会话缓存解析的,因此您将获得相同的实例。
所以,你有几个选择:
clear()
或detach()
强制清除会话缓存 你确定rows变量实际上不包含返回结果的最后一行吗? 如何初始化行以及如何处理循环内的变量? 如果要从所有查询中获取所有结果,则必须将每个查询(在循环内)添加到在循环开始之前声明的列表/集变量。
或者您可以使用一些正确的SQL并执行:
SELECT * FROM Table1 [JOIN/UNION] Table2 etc...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.