事件监听器 - 实体列级监听器

Event Listeners - Entity Column level Listener

我是事件侦听器的新手,想知道是否有任何解决方案可以只跟踪列级别值的更改,而不是编写事件侦听器来查看它是否是 Book 的实例以及书的价格是否发生了变化。

例如:

Table

@Entity
public class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", updatable = false, nullable = false)
    private Long id;

    @Column
    private LocalDate publishingDate;

    @Column
    private Double price;

}

在上面table中,我只想知道是否对图书价格进行了任何更改,而不是每次都通知监听器实体的任何更新。

谢谢

要跟踪字段的变化,您需要记住旧值并将其与新值进行比较。引入新字段 @Transient Double previousPrice。使用 price 值在 @PostLoad 回调方法中初始化它。您可以通过比较 pricepreviousPrice 中的

来检查它是否已更改
  1. @PreUpdate 方法(实体内部)
  2. 调用 setPrice 方法时(实体内部)
  3. 随时使用方便的方法book.isPriceChanged(){ return price!=null && price.equals(previousPrice);}(外部实体)