从hibernate拦截器获取实体字段注释

时间:2015-07-20 06:26:20

标签: java spring hibernate jpa

在hibernate加载此实体后,我需要为指定的字段(使用自定义注释)执行一些额外的业务逻辑。所以,我创建了一个像这样的hibernate拦截器。但令我困惑的是,我无法获得注释信息。以下代码中的encryptAnnotation始终为null。

public class HibernateInterceptor extends EmptyInterceptor {

    public boolean onLoad(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
        for (int i = 0; i < types.length; i++) {
            Type type = types[i];
            if (type instanceof StringType) {
                StringType stringType = (StringType) types[i];
                Encrypt encryptAnnotation = stringType.getJavaTypeDescriptor().getJavaTypeClass().getAnnotation(Encrypt.class);
                if (encryptAnnotation != null) {
                    //todo: decrypt field
                    return true;
                }
            }
        }
        return false;
    }
}

这是实体和注释定义:

@Entity
@Table(name = "table_name")
public class Trade implements Serializable {
    @Encrypt
    private String shiptoAddr;
}


@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Encrypt {
}

1 个答案:

答案 0 :(得分:1)

您正在尝试从映射信息中获取注释,并且最终您尝试在String类上找到注释,这显然不起作用。

相反,您需要检测传入的entity对象中的所有字段,并检查字段上是否存在注释。