在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 {
}
答案 0 :(得分:1)
您正在尝试从映射信息中获取注释,并且最终您尝试在String
类上找到注释,这显然不起作用。
相反,您需要检测传入的entity
对象中的所有字段,并检查字段上是否存在注释。