我怎么知道Hibernate在运行getHibernateTemplate().saveOrUpdate(object);
之后是否插入或更新了该方法无效!
saveOrUpdate()执行以下操作:
- 如果对象在此会话中已经持久,则不执行任何操作
- 如果与会话关联的另一个对象具有相同的标识符,则抛出异常
- 如果对象没有标识符属性,则保存()它
- 如果对象的标识符具有分配给新实例化对象的值,则保存()它
- 如果对象是由or版本化的,并且版本属性值是分配给新实例化对象的相同值,则保存()它
- 否则更新()对象
我担心我总是要检查对象是否已经有'主键/ id'在运行此方法之前,这是唯一的方法吗?如果是,我怎么能得到主键/ ID是通用的吗?
Serializable id = session.getIdentifier(entity);
或Object id = entityManagerFactory.getPersistenceUnitUtil().getIdentifier(entity);
??
答案 0 :(得分:2)
是,检查与持久性上下文中的实体关联的标识符意味着我们正在检查实体是否处于持久状态。 既然你已经提到我建议的文件,请看看这个问题, Hibernate saveOrUpdate behavior - 看看奥拉夫的答案,它解释了它如何以简短而甜蜜的方式运作。
使用JPA 2.0我们有
Object id = entityManagerFactory.getPersistenceUnitUtil()。getIdentifier(entity);检查方式。
但是你的问题被标记为休眠,所以第一个是正确的。
Serializable id = session.getIdentifier(entity);