【问题标题】:How Hibernate/Jpa differs transient and detached instance/object?Hibernate/Jpa 如何区分瞬态和分离的实例/对象?
【发布时间】:2018-02-22 08:29:50
【问题描述】:

其实这两个问题都很好:

How Hibernate differs transient and detached entities?

Check for detached entity in Hibernate

我实际上已经阅读了很多次this,并查看了 stackoverflow 中的一些帖子。很多答案只是从持久化状态定义中复制而来,没有进一步解释。

让我们看看下面的例子:

Person person = new Person();
person.id = 123; // 123 identifier exist in database.
person.name = "abc";

Hibernate 文档声明对于 transient 实例,它必须是:

  • 使用 new 运算符实例化
  • 在数据库中没有持久表示
  • 没有分配标识符值

这看起来不像是一个瞬态实例,它不符合定义。

它看起来也不像是一个分离的实例,显然它没有从一个关闭的会话中分离出来。

那么,这是一个暂时的还是分离的实例?

【问题讨论】:

  • 据我了解...(未分配标识符值)或注册到持久性上下文
  • 另请查看我对您提到的问题之一的回答:stackoverflow.com/questions/48426067/…
  • 对不起,我不太明白你的回答,你的意思是,休眠跟踪实例是暂时的还是仅通过其标识符分离?
  • 它似乎以某种方式记录了以前分离的实体

标签: java hibernate jpa sessionfactory hibernate-session


【解决方案1】:

来自 Pro JPA 2.1:

当数据存储中存在实体的表示时,实体具有持久标识;这是一个 数据库表中的行。如果它不在数据库中,那么即使内存中的实体可能将其身份设置在 一个字段,它没有永久标识

所以只有在实体已经持久化之后才考虑持久化id,而不是通过为id元素赋值

【讨论】:

  • 那么根据我的例子,它是一个瞬态或分离的实例?
  • 瞬态(又名新)
猜你喜欢
  • 2018-07-03
  • 2012-09-03
  • 1970-01-01
  • 2013-08-19
  • 2014-10-13
  • 1970-01-01
  • 2021-03-03
  • 2018-06-22
  • 1970-01-01
相关资源
最近更新 更多