0
for (int i=0; i<10; i++) {
SomeClass anObj = new SomeClass();
anObj.setField(i);
anObj.setAnotherField("XYZ"+i);
session.save(anObj);
}
session.getTransaction().commit();
是没有错误运行,并添加10行这是我想要的表。 字段是的主键SomeClass。
当我移动之外声明:
SomeClass anObj = new SomeClass();
for (int i=0; i<10; i++) {
anObj.setField(i);
anObj.setAnotherField("XYZ"+i);
session.save(anObj);
}
session.getTransaction().commit();
我收到“SomeClass的实例的标识被改变”的错误。
我从中看到的是,Hibernate在将数据保存到数据库中之后仍然关注对象的关键字段 - 甚至在它应该之后,并且在提交时抱怨它。
我希望我应该留在代码中的对象一旦我保存它,这是没有道理的。
我想知道它背后是什么。
有没有一种方法 - 一个属性保存()或另一种保存模式来解决这个问题?我不希望在循环的每次迭代中重新声明anObj。
THX的答案域对象。那么在这种情况下 - 是否有办法将对象直接绑定到某种“保存模式”,以便HN在检测到发生的所有事情的同时,每次发出新的保存信号那个同样的东西?否则,核心代码中的所有干扰都不会带来太大的收益。 – Roam
我会说你应该考虑一下你的代码的设计模式。通常,Hibernate是在DAO(数据访问对象)类中实现的。从数据库中获取/更新时,只保留实体持久性,否则应用程序始终与分离的实例一起工作(如果对象被修改,则不需要DB操作) – gerrytan
再次感谢。这是一个很好的角度。 – Roam