使用带有自定义注释的hibernate-envers

时间:2016-10-13 15:42:56

标签: java hibernate classloader hibernate-envers interception

在我当前的项目中,我们需要分配一个带有实体类的JAR,以便与瘦客户端一起使用(尽可能更薄)。注释@Entity(来自JPA)不是问题,但是当使用hibernate-envers @Audited注释相同的类时,依赖性成为问题。

我现在解决这个问题的想法包括创建一个 @CustomAuditAnnotattion ,并在休眠引导期间将它们识别为hibernate-envers注释,而不是使用Interfaces实体类。 / p>

有些事情是这样的:

@Entity
@CustomAuditedAnnotation
public class MyEnity implements Serializable {
...
}

并且,在休眠期间提升:

...
public void onEntityClassLoad(Class<? extends Serializable> clazz) {
    final CustomAuditAnnotation auditAnn = clazz.getAnnotation(CustomAuditAnnotation.class);

    if (auditAnn != null) {
        Field annField = clazz.getDeclaredField("annotations");
        annField.setAccessible(true);
        @SuppressWarnings("unchecked")
        Map<Class<? extends Annotation>, Annotation> annotations = (Map<Class<? extends Annotation>, Annotation>) annField
                .get(clazz);
        annotations.put(Audited.class, new Audited() {

            @Override
            public Class<? extends Annotation> annotationType() {
                return Audited.class;
            }

            @Override
            public RelationTargetAuditMode targetAuditMode() {
                return RelationTargetAuditMode.valueOf(auditAnn.targetAuditMode());
            }

            @Override
            public ModificationStore modStore() {
                return null;
            }

            @Override
            public Class[] auditParents() {
                return null;
            }
        });
    }
}

我的上下文是:JbossAS 7.1.1.Final,Hibernate 4.0.1,上面的方法应该留在一个没有分布的JAR(服务器端)。

问题:

  

如何拦截 hibernate加载映射实体类的那一刻?

0 个答案:

没有答案