首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试避免为OneToMany关系触发JPA EntityListeners

尝试避免为OneToMany关系触发JPA EntityListeners
EN

Stack Overflow用户
提问于 2018-06-07 13:56:25
回答 1查看 251关注 0票数 0

大家好,我有我的实体

代码语言:javascript
复制
@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;
}

当我运行这段代码时

代码语言:javascript
复制
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时,第二次是在保存注释时),但我想要一次(仅第一次)。我已经尝试了两端的fetch和cascade的所有方法,但我不能让它工作。我还想在TaskInfoEntityListener中加入某种逻辑,以检查"comments“字段是否发生了变化,但我真的不喜欢这个解决方案。你在想什么?你有更好的方法或其他想法吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-06-07 17:26:58

在您的EntityListener中,尝试为每个步骤提供生命周期侦听器,并查看调用了什么。最有可能的情况是,你被不同的事件所调用。(也许是持久化和更新?)

代码语言:javascript
复制
@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() );
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50733867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档