我在src / main / resources / META-INF /上有一个persistence.xml,在src / test / ...有另一个,它只在数据库的值上有所不同:
<properties>
<property name="hibernate.archive.autodetection" value="class, hbm"/>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost/lanchecker-prod" />
和
<properties>
<property name="hibernate.archive.autodetection" value="class, hbm"/>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost/lanchecker-test" />
但是我也使用类自动检测,它对主资源有效,但在使用测试资源时失败。
有没有办法让这个工作或我不得不使用显式的类命名?
编辑:
链接的建议实际上并不起作用,它需要将项目构建并测试为.jar。在我的情况下,我试图在Eclipse下进行测试,这可以解析src / test / resources / META-INF /位置。
我尝试添加:
<jar-file>${PROJECT_LOC}/src/main/java/biz/ianw/lanchecker/</jar-file>
但结果是:
Exception in thread "main" java.lang.ExceptionInInitializerError
...
Caused by: javax.persistence.PersistenceException: Unable to build entity manager factory
...
Caused by: java.lang.IllegalArgumentException: Unable to visit JAR file:${PROJECT_LOC}/src/main/java/biz/ianw/lanchecker/. Cause: Illegal character in opaque part at index 6: file:${PROJECT_LOC}/src/main/java/biz/ianw/lanchecker/
然后:
<jar-file>C:\Users\Ian\git\LANchecker\src\main\java\biz\ianw\lanchecker\</jar-file>
通过实体经理工厂启动,但后来仍然失败:
Exception in thread "main" java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: RouteCabinFares is not mapped [select rcf from RouteCabinFares rcf]
(RouteCabinFares是我尝试自动定位的类之一)。
也许这种技术只能用于在jar文件中自动定位?
答案 0 :(得分:0)
据我所知,我在这里想做的事情是不可能的。
我提出的最好的解决方法是从persistence.xml中删除您希望改变的属性,在这种情况下:
<property name="hibernate.connection.url" value="jdbc:mysql://localhost/lanchecker-test" />
并在运行时使用类似于:
的代码指定它们Properties properties = new Properties();
properties.setProperty("hibernate.connection.url", "jdbc:mysql://localhost/lanchecker-test");
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("lanchecker", properties);
然后可以在运行时通过Spring注入实际的属性值。这涉及将标准属性分离为persistence.xml并将不同的属性分离到spring.xml中,在我看来,这非常非常好。
我得到的印象是,Spring Boot可能会提供一个更简单的解决方案,但在另一个框架上付出代价,所以,目前,上述内容正是我的目标。