当前位置: 首页 > 面试题库 >

如何知道分离的JPA实体是否已经保留?

巫健柏
2023-03-14
问题内容

我的应用程序的Web UI层中有一个JPA实体实例。我想随时知道此实体是否已经保存在数据库中或仅存在于用户会话中。

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

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

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

我正在将JPA 1与Hibernate 3.2实现配合使用,并且希望坚持使用该标准。


问题答案:

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

本节介绍了用于管理实体实例生命周期的EntityManager操作。实体实例的特征可以是新的,管理的,分离的或删除的。

  • 一个 新的 实体实例有 没有持久化标识 ,并且尚未与一个持久化上下文关联。
  • 实体实例是 具有持久身份 的实例 该实例 当前与持久性上下文相关联。
  • 分离 实体实例的实例 与持久标识 与一个持久上下文相关联不是(或不再)。
  • 一个 删除 实体实例与持久标识,与一个持久化上下文相关联,即定于从数据库中取出一个实例。

和一个图形化的插图:

因此,根据定义,一个独立的实体已经存在,实际上我不认为这是您的真正问题。现在,如果您想知道一个实体是否是 实体(即没有任何持久身份),那该怎么办:

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


 类似资料:
  • 问题内容: 我使用的是Font-Awesome,但未加载字体文件时,图标显示为。 因此,我希望这些图标在未加载文件时具有。 我怎么知道这些文件已经加载,我终于可以显示图标了? 编辑: 我不是在说页面何时加载(onload),因为字体可以在整个页面之前加载。 问题答案: 现在在GitHub上: 本质上,该方法通过比较两种不同字体的字符串宽度来工作。我们使用Comic Sans作为测试字体,因为它是

  • null 我能找到的使用JPA/Hibernate的唯一有效解决方案是执行以下步骤。这是因为hibernate将实体保留在第一级缓存中,直到事务结束。 创建新实体 强制快速刷新() 分离实体 这样做的开销是 null 使用JDBC或JdbcTemplate,但您必须为实体编写自己的插入 所以问题是:是否存在同时坚持和分离的可能性,或者甚至更好地坚持而不成为被管理的?

  • 问题内容: 是否可以查询JPA EntityManager 是否分离了给定的实体?这篇SO帖子正在讨论类似的问题,但没有指出查询实体的分离状态的JPA EntityManager的方法。我希望使用JPA方式,否则将使用Hibernate特定的方式。 问题答案: 要检查给定实体是否由当前实体管理,可以使用。

  • 另外,我有一个IOC托管bean,它内部有一个事务方法。 有2个实体具有单向Many2One-- AuModule在上没有引用

  • 我在尝试使用Spring Data JPA和Hibernate作为JPA提供程序执行批插入操作时遇到了问题。 我有以下方法在我的服务。这就是抛出异常的地方。 Institute是一个实例变量,并提前获取。 我还将实体设置为级联、持久和合并。 为什么这段代码起作用 而此代码不

  • 是否有方法查询JPA EntityManager是否分离给定实体?这篇SO帖子讨论了一个类似的问题,但并没有说明向JPA EntityManager查询实体分离状态的方法。我更喜欢JPA方式,否则会针对Hibernate。