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 - 查找 xml 文件的 xpath

java - Java ArrayList中的比较和条件检查

java - 使用Java多线程,什么是最有效的协调找到最好的结果?

hibernate - 哪个版本的 Hibernate 符合 JPA 1.0

jpa - eclipselink 查询结果缓存不起作用

java - 使用 JPA 坚持时覆盖的字段

java - jaxb编码(marshal)复杂结构

jakarta-ee - Java EE/JPA 集成测试和 Spring 一样的回滚

java - 从 Hibernate hbm 到 JPA 注释,一个具有挑战性的任务

JPA EntityManager.detach() 仍然加载惰性关系