父映射超类的EntityListeners未生效,需子类重复配置?这正常吗?
JPA审计监听器继承问题解答
这种情况是正常的,核心原因和JPA注解的继承规则有关:
- JPA的
@EntityListeners注解默认不会被子类继承,哪怕父类是@MappedSuperclass类型。@MappedSuperclass只会传递实体的映射元数据(比如字段、关联关系),但监听器配置属于类级别的专属设置,不会自动向下传递。 - 你的L1类虽然加了
AuditingEntityListener监听器,但这个配置只对L1本身生效,不会传递给继承它的L2。而L2里的@CreatedDate字段需要这个监听器来触发自动赋值,所以没加注解时审计功能失效。 - 当你在L2上显式添加
@EntityListeners({AuditingEntityListener.class})后,监听器配置会被应用到L2,同时它的子类L3作为实体类,会继承这个监听器配置,所以审计功能就能正常工作了。
如果不想每个类都重复加监听器注解,也可以用全局配置方案:
- 在Spring配置类上添加
@EnableJpaAuditing注解,全局开启JPA审计功能,这样所有标注了@CreatedDate、@LastModifiedDate等审计注解的字段,都会自动被AuditingEntityListener处理,无需再在类上单独标注@EntityListeners。
内容的提问来源于stack exchange,提问作者Jin Kwon
相关产品推荐
相关产品推荐

