从jar自动检测Hibernate中的类

我有一个带有以下persistence.xml文件的几个实体的JavaEE项目:

 ...    ... 

它似乎工作。 然后将该项目作为JAR部署到两个不同的项目中。 在其中一个中, persistence.xml文件与上面的文件基本相同,即使用Hibernate的autodetectionfunction。 但是,它似乎不起作用(因为我认为它需要加载搜索jar中的实体)。 当我尝试手动列出两个xml文件中的所有实体时,一切正常。

编辑:它适用于jar文件,但只能使用jar的绝对路径。 对团队项目来说相当无用。

如果我正确地读了你,如果它不起作用,那么实体与使用的persistence.xml在不同的 JAR中,对吧?

我认为你是对的,这就是问题所在。 您需要告诉Hibernate使用jar-file元素扫描哪些JAR。 请参阅此处的Hibernate文档中的说明和示例

我认为Hibernate只扫描jar文件中的JPA实体,而不是例如类/文件夹中的JPA实体,或者只扫描jar中的persistence.xml,或类似的东西。 我没有尝试弯曲Hibernate扫描仪,而是觉得自己扫描实体会更容易。 这比我预想的容易得多。

  val entities = mutableListOf>() AnnotationDetector(object : AnnotationDetector.TypeReporter { override fun reportTypeAnnotation(annotation: Class?, className: String?) { entities.add(Class.forName(className)) } override fun annotations(): Array> = 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 /斑点/主/ VOK-示例-污物/ SRC /测试/ JAVA / COM / github上/ VOK /示例/污物/ Server.kt

以下都没有帮助:添加

 false 

persistence.xml文件什么也没做(根据doc,它在JavaSE中被忽略了); 加入

  

persistence.xml文件什么都没做(反正我不使用hbm)。 不要浪费时间尝试添加它们,它们将无法启用正确的自动扫描。

使用空元素可以使用例如WildFly 8.2.1.Final(Hibernate 4.3.7.Final):)。 ( 不起作用)

(但它不能在WildFly之外的Eclipse运行的JUnit测试中工作,我们必须删除它。这不是问题,因为库已经在类路径中。错误类似于: java.net.URISyntaxException: Expected scheme-specific part at index 5: file:> => =>