gpt4 book ai didi

java - 如何知道一个分离的 JPA 实体是否已经被持久化?

转载 作者:IT老高 更新时间:2023-10-28 21:14:42 25 4
gpt4 key购买 nike

我的应用程序的 Web UI 层中有一个 JPA 实体实例。我想随时知道这个实体是否已经保存在数据库中,或者它是否只存在于用户 session 中。

它将在业务层中,我会使用 entitymanager.contains(Entity) 方法,但在我的 UI 层中,我认为我需要一个额外的属性来指示实体是否已保存。如何实现?我目前正在考虑以下选项:

  • 一个 JPA 属性,其默认值由数据库设置,但会在每次更新后强制重新读取?
  • 在我的代码中手动设置或由 JPA 自动设置的非 JPA 属性?

有什么建议/其他建议吗?

我正在使用 JPA 1 和 Hibernate 3.2 实现,并且希望坚持标准。

最佳答案

首先,让我们提醒一下实体的各种状态。来自 JPA 1.0 规范(在第 3.2 节实体实例的生命周期中):

This section describes the EntityManager operations for managing an entity instance’s lifecycle. An entity instance may be characterized as being new, managed, detached, or removed.

  • A new entity instance has no persistent identity, and is not yet associated with a persistence context.
  • A managed entity instance is an instance with a persistent identity that is currently associated with a persistence context.
  • A detached entity instance is an instance with a persistent identity that is not (or no longer) associated with a persistence context.
  • A removed entity instance is an instance with a persistent identity, associated with a persistence context, that is scheduled for removal from the database.

还有一个图解:

alt text

所以,根据定义,一个分离的实体已经被持久化了,我实际上不认为这是你真正的问题。现在,如果您想知道一个实体是否是新的(即没有任何持久身份),那么这个呢:

@Transient
public boolean isNew() {
return (this.id == null);
}

关于java - 如何知道一个分离的 JPA 实体是否已经被持久化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2779857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com