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

时间:2019-02-28 16:45:12

标签: java hibernate jpa entity event-listener

我是事件侦听器的新手,想知道是否有解决方案仅跟踪列级值的变化,而不是编写事件侦听器以查看其实例是否为Book以及价格是否发生变化。

例如:

表格

@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;

}

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

谢谢

1 个答案:

答案 0 :(得分:0)

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

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