如何使用JPA回调?


当您需要将自己的操作方法绑定到某个实体生命周期事件时,请不要重新发明轮子。只需依靠内置的JPA回调。
本应用是启用JPA回调(Pre/ PostPersist,Pre/ PostUpdate,Pre/ PostRemove,和PostLoad)的示例。
第一步:在实体中,编写回调方法并使用正确的注释:

@Entity
public class User implements Serializable {

    private static final Logger logger = 
            Logger.getLogger(User.class.getName());
        
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private String city;
    private int age;
    
    @PrePersist
    public void prePersist() {
        logger.info("@PrePersist callback ...");
    }       
    
    @PreUpdate
    public void preUpdate() {
        logger.info(
"@PreUpdate callback ...");
    }
    
    @PreRemove
    public void preRemove() {
        logger.info(
"@PreRemove callback ...");
    }
    
    @PostLoad
    public void postLoad() {
        logger.info(
"@PostLoad callback ...");
    }
    
    @PostPersist
    public void postPersist() {
        logger.info(
"@PostPersist callback ...");
    }
    
    @PostUpdate
    public void postUpdate() {
        logger.info(
"@PostUpdate callback ...");
    }
    
    @PostRemove
    public void postRemove() {
        logger.info(
"@PostRemove callback ...");
    }

注意:在bean类上注释的回调方法必须返回void并且不带参数,比如@PrePersist 到@PostRemove
源代码可以在这里找到