如何使Hibernate忽略特定名称的属性?

我用Hibernate映射了一个Scala类。该类包含一个惰性val,因此Scala会自动创建一个名为bitmap$0的类属性,不幸的是,该属性也被Hibernate映射。

如何防止Hibernate映射此自动生成的属性?

sky43420024420 回答:如何使Hibernate忽略特定名称的属性?

好的,我找到了解决方案。我设置了一个自定义MetadataProvider,它为@Transient属性伪造了bitmap$0注释。

设置自定义MetadataProvider

configuration.getReflectionManager.asInstanceOf[JavaReflectionManager].setMetadataProvider(new JavaMetadataProvider {
    override def getAnnotationReader(annotatedElement: AnnotatedElement): AnnotationReader = {
        if (annotatedElement.toString.endsWith("bitmap$0")) {
            new TransientAnnotationReader(annotatedElement)
        } else {
            new JavaAnnotationReader(annotatedElement)
        }
    }
})

涉及的课程:

class JavaAnnotationReader(val element: AnnotatedElement) extends AnnotationReader {
    override def getAnnotation[T <: Annotation](annotationType: Class[T]): T = element.getAnnotation(annotationType)

    override def isAnnotationPresent[T <: Annotation](annotationType: Class[T]): Boolean = element.isAnnotationPresent(annotationType)

    override def getAnnotations: Array[Annotation] = element.getAnnotations
}

class TransientAnnotationReader(val element: AnnotatedElement) extends AnnotationReader {
    override def getAnnotation[T <: Annotation](annotationType: Class[T]): T = element.getAnnotation(annotationType)

    override def isAnnotationPresent[T <: Annotation](annotationType: Class[T]): Boolean = annotationType == classOf[Transient]

    override def getAnnotations: Array[Annotation] = element.getAnnotations
}
本文链接:https://www.f2er.com/3170129.html

大家都在问