【问题标题】:Trying to avoid the JPA EntityListeners triggering for a OneToMany relationship试图避免 JPA EntityListeners 触发 OneToMany 关系
【发布时间】:2018-06-07 05:56:25
【问题描述】:

大家好,我有我的实体

@Entity
@Getter
@Setter
@EntityListeners(TaskInfoEntityListener.class)
public class TaskInfo extends Auditable {

    @Id
    private String taskId;

    ...

    @OneToMany(mappedBy = "task", orphanRemoval = true, fetch = FetchType.EAGER)
    private List<TaskComment> comments;
}

当我运行这段代码时

final TaskInfo taskInfo = new TaskInfo();
taskInfo.setTaskId("1234");

final TaskComment taskComment = new TaskComment();
taskComment.setComment("comment_1234");
taskInfo.setComments(Collections.singletonList(taskComment));

TaskInfo newTaskInfo = taskInfoRepository.save(taskInfo);

EntityListener 运行两次(第一次在保存 TaskInfo 时,第二次在保存 cmets 时),但我想要一次(仅第一次)。 我已经尝试了两边的 fetch 和 cascade ,但我不能让它工作。我还想在 TaskInfoEntityListener 中添加某种逻辑,以检查“cmets”字段是否更改,但我不太喜欢这种解决方案。 你有什么事吗?您有更好的方法或任何其他想法吗?

谢谢!

【问题讨论】:

    标签: java jpa spring-data


    【解决方案1】:

    在您的 EntityListener 中,尝试为每个步骤提供生命周期侦听器,并查看调用了什么。很可能你被要求参加不同的活动。 (也许坚持和更新?)

    @PrePersist
    public void methodInvokedBeforePersist(TaskInfo ti) {
        System.out.println("persisting TaskInfo with id = " + ti.getTaskId());
    }
    
    @PostPersist
    public void methodInvokedAfterPersist(TaskInfo ti) {
        System.out.println("Persisted TaskInfo with id = " + ti.getTaskId());
    }
    
    @PreUpdate
    public void methodInvokedBeforeUpdate(TaskInfo ti) {
        System.out.println("Updating TaskInfo with id = " + ti.getTaskId());
    }
    
    @PostUpdate
    public void methodInvokedAfterUpdate(TaskInfo ti) {
        System.out.println("Updated TaskInfo with id = " + ti.getTaskId());
    }
    
    @PreRemove
    private void methodInvokedBeforeRemove(TaskInfo ti) {
        System.out.println("Removing TaskInfo with id = " + ti.getTaskId());
    }
    
    @PostRemove
    public void methodInvokedAfterRemove(TaskInfo ti) {
        System.out.println("Removed TaskInfo with id = " + ti.getTaskId() );
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      • 2010-10-27
      • 2014-07-30
      • 1970-01-01
      • 2019-02-10
      • 2021-02-10
      • 1970-01-01
      相关资源
      最近更新 更多