首页 > 解决方案 > 未调用子类实体上的实体侦听器回调

问题描述

我的项目有

现在我在如下服务中编写了一个 EntityListener:

public class TestEntityListener {
@PrePersist
public void prePersist(Resource r) {
    perform("INSERTED");
}
@PreUpdate
public void preUpdate(Resource r) {
    perform("UPDATED");
}
@PreRemove
public void preRemove(Resource r) {
    perform("DELETED");
}
@Transactional
private void perform(String target) {
    CallLogBaseDaoJpa callLogBaseDaoJpa = BeanUtil.getBean(CallLogBaseDaoJpa.class);
    //callLogBaseDaoJpa.persist(target));
}

}

Bean Util 如下:

@Service
public class BeanUtil implements ApplicationContextAware {
    private static ApplicationContext context;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        context = applicationContext;
    }
    public static <T> T getBean(Class<T> beanClass) {
        return context.getBean(beanClass);
    }
}

现在我必须用 @TestListener 注释实体类(资源),但我无法这样做,因为我的实体在域项目中并且无权访问服务。

为了缓解这种情况,我尝试将 Resource 子类化如下,并将 entityListener 添加到该子类中。我可以将此 Resource1 保留在服务中,并且所有此类引用都将为我解决但是在这种情况下,我的测试侦听器不会被调用

  @Entity
  @EntityListeners({TestEntityListener.class})
  public class Resource1 extends Resource    
    {
        private static final long serialVersionUID = -6723893476944789741L;
    }

1)我期望通过继承原始实体方法来调用侦听器吗

放错地方了?难道它没有预期的工作?

2)我做对了吗,或者如果有人可以在不改变我的依赖关系的情况下建议任何其他方法,会受到欢迎吗?

标签: javaspringhibernatejpaentitylisteners

解决方案


推荐阅读