我认为 Hibernate 仅扫描 jar 文件中的 JPA 实体,而不是例如类/文件夹中的 JPA 实体,或者它仅使用 persistence.xml 或类似的东西扫描 jar。与其试图弯曲 Hibernate 扫描仪,我觉得自己扫描实体会更容易。这比我预期的要容易得多。
val entities = mutableListOf<Class<*>>()
AnnotationDetector(object : AnnotationDetector.TypeReporter {
override fun reportTypeAnnotation(annotation: Class<out Annotation>?, className: String?) {
entities.add(Class.forName(className))
}
override fun annotations(): Array<out Class<out Annotation>> = arrayOf(Entity::class.java)
}).detect("com.github")
VaadinOnKotlin.entityManagerFactory = Persistence.createEntityManagerFactory("sample", mapOf(AvailableSettings.LOADED_CLASSES to entities))
我使用了大气jar文件中内置的检测器;但是您可能可以使用https://github.com/rmuller/infomas-asl或此处所述的其他内容:在运行时扫描 Java 注释
完整的代码示例位于此处:https ://github.com/mvysny/vaadin-on -kotlin/blob/master/vok-example-crud/src/test/java/com/github/vok/example/crud/Server.kt
以下都没有帮助:添加
<exclude-unlisted-classes>false</exclude-unlisted-classes>
对persistence.xml
文件什么也没做(根据文档,它在 JavaSE 中被忽略了);添加
<property name="hibernate.archive.autodetection" value="class, hbm" />
对persistence.xml
文件什么也没做(反正我没有使用 hbm)。不要浪费时间尝试添加它们,它们不会启用正确的自动扫描。