Как заставить Hibernate игнорировать свойство определенного имени? - PullRequest
0 голосов
/ 04 ноября 2019

Я сопоставил класс Scala с Hibernate. Класс содержит отложенное значение, поэтому Scala автоматически создает свойство класса с именем bitmap$0, которое, к сожалению, также отображается в Hibernate.

Как я могу запретить Hibernate отображать это автоматически сгенерированное свойство?

1 Ответ

0 голосов
/ 04 ноября 2019

ОК, я нашел решение. Я установил пользовательский 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...