事件监听器 - 实体列级监听器
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
回调方法中初始化它。您可以通过比较 price
和 previousPrice
中的
来检查它是否已更改
@PreUpdate
方法(实体内部)
- 调用
setPrice
方法时(实体内部)
- 随时使用方便的方法
book.isPriceChanged(){ return price!=null && price.equals(previousPrice);}
(外部实体)
我是事件侦听器的新手,想知道是否有任何解决方案可以只跟踪列级别值的更改,而不是编写事件侦听器来查看它是否是 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
回调方法中初始化它。您可以通过比较 price
和 previousPrice
中的
@PreUpdate
方法(实体内部)- 调用
setPrice
方法时(实体内部) - 随时使用方便的方法
book.isPriceChanged(){ return price!=null && price.equals(previousPrice);}
(外部实体)