来自src / test

时间:2015-12-28 17:55:17

标签: java jpa persistence.xml

我在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文件中自动定位?

1 个答案:

答案 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可能会提供一个更简单的解决方案,但在另一个框架上付出代价,所以,目前,上述内容正是我的目标。