java - 是否可以在 jpa 中调用不调用 setter 的情况下更新实体

标签 java jpa eclipselink

我正在开发应用程序,它有一个名为 My.java 的实体,它是从另一个具有名为edited 的字段的实体扩展的。 对于每次更新,该字段都将使用当前时间戳进行更新

我正在使用单表继承策略。

我使用 jpa/eclipse 链接作为持久性提供程序。

编辑字段正在使用当前时间戳进行更新,即使没有调用 setter 方法,我的 java 代码中也没有其他引用更改此编辑字段的值。

在调试时,我可以看到 UPDATE QL 语句,用于编辑字段更新。

我真的很想知道为什么/如何更新它的值,是否可以在没有 setter 调用的情况下进行?

这是映射的父类(super class):

  @MappedSuperclass

public abstract class SuperEntity implements  Serializable {    

/**
 * 
 */
private static final long serialVersionUID = 1125783654888232605L;
/**
 * The time the entry was created
 */
@Column(name = "CREATED")
private Timestamp created;
/**
 * The date the entry was edited
 */
@Column(name = "EDITED")
@Version
private Timestamp edited;

最佳答案

检查这些事情。

  1. 您的实体可能正在实现某种可审核的接口(interface)
  2. 您的字段可能具有 @Version 注释

第一种情况你已经弄清楚了接口(interface)的用法并且你可以理解它 在第二种情况下,这是 EJB 和 Hibernate 中的默认行为和预期行为。

我在谷歌搜索后得到了这个链接,它可能对你有用

https://technology.amis.nl/2006/01/03/ejb-30-persistence-using-the-version-annotation-for-optimistic-locking-in-the-glassfish-reference-implementation/

这不是什么大问题,你可以轻松克服

关于java - 是否可以在 jpa 中调用不调用 setter 的情况下更新实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43257525/

相关文章:

java - 除了手动之外,还有什么方法可以在 Eclipse IDE 中进行 servlet 映射吗?

java - 将特定行从一个二维数组复制到另一个二维数组,无需 system.arraycopy

java - 使用不需要的参数创建查询 Spring Data Jpa

java - JPA : removing from a collection 中管理双向关系时出现问题

java - @ManyToMany 与 EclipseLink 2.5.2 和 Jackson 2.4.4

java - 数据绑定(bind)到未知类型的容器

java - hibernate 一对多删除列表

java - JPA 命名查询连接

java - JPA/Hibernate : JPA Relationship, 过滤 NULL 值

java - jpa级联删除反向关系