scala - 如何让 Hibernate 忽略某个名称的属性?
问题描述
我用 Hibernate 映射了一个 Scala 类。该类包含一个惰性值,因此 Scala 会自动创建一个名为的类属性bitmap$0
,不幸的是它也被 Hibernate 映射。
如何防止 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
}
推荐阅读
- windows - 在 Windows 包 tinyredis-2.1.1 上构建语言 D 错误:未定义标识符 `EWOULDBLOCK` dmd 失败,退出代码为 1
- android - Android RX Java,无法解析 scheduler.io()
- twitter-bootstrap - 我的选择器无法正确显示
- xslt - XSL - 将 2 个 fo:blocks 放在一个页面上
- twitter-bootstrap - Bootstrap 4 - 两个列在移动设备上不起作用
- css - 没有样式应用于 angular-2-dropdown-multiselect
- jquery - jQuery droppable - 只允许将一个项目拖放到一个元素上,然后使拖放的项目再次可拖动
- python - 使用 django 和 cassandra 进行迁移时出现类型错误
- airflow - 使用 SubDagOperator 的 schedule_interval 和其他问题
- php - 如何使用 json 编码(Symfony 4)从 mysql 数据库中获取数据?