获取对象状态

时间:2009-05-14 07:46:28

标签: java hibernate

hibernate是否提供了一个返回对象状态(瞬态,持久,分离)的方法?

3 个答案:

答案 0 :(得分:3)

请参阅Javadoc Hibernate Session并查看方法

  • contains - 检查此实例是否与此会话相关联。
  • getIdentifier - 返回与此会话关联的给定实体的标识符值。如果实体未关联,请注意抛出的异常,每个异常应被视为致命,并且不应在其后使用会话
  • get - 返回给定实体类的持久实例和给定标识符,如果没有这样的持久实例则返回null。

我会使用'get'并进一步检查更改的值,之后它只是一个“saveOrUpdate”来持久化或更新(并重新附加)实际对象

答案 1 :(得分:3)

Session.contains告诉您对象是否与会话相关联。如果它没有标识符,则它是瞬态的,如果它具有标识符并且与会话相关联,则是持久的。分离但不与会话相关联的标识符。

如果这没有帮助,请考虑用更多上下文重新描述您的问题,也就是说,为什么您首先需要知道对象的状态?

答案 2 :(得分:0)

我不同意使用session.contains(obj)来揭示hibernate对象状态。在简单调用session.clear()之后,以前持久/加载的对象将被假定为TRANSIENT - 如果您没有主键但是没有主键,则您不知道它处于哪种状态...

在Hibernate 3中可以找到正确的方法: org.hibernate.engine.ForeignKeys.isTransient(...)