2015-12-28 2 views
0

У меня есть persistence.xml в src/main/resources/META-INF/и еще один из src/test/... которые отличаются только значением базы данных:Класс autodetection в 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" /> 

Однако я также использую класс автоопределение, который работает отлично подходит для основного ресурса, но терпит неудачу, когда я использую тестовый ресурс.

Есть ли способ заставить это работать, или я обязан использовать явное присвоение классов?

EDIT:

Связанная предложение не на самом деле работает это требует проект построен и испытан как .jar. В моем случае я пытаюсь выполнить тестирование в Eclipse, которое может разрешить src/test/resources/META-INF/location.

Я попытался добавить:

<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

Помогает ли это? [Нет автоматического определения объектов JPA в maven-verify] (http://stackoverflow.com/questions/4885836/no-autodetection-of-jpa-entities-in-maven-verify) –

+0

Это выглядит так, спасибо. Не нашел это, мое плохое. Должен ли я удалить этот вопрос? – Ian

+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 может предложить более простое решение, но за счет в другой структуре, поэтому на данный момент это то, что я собираюсь сделать.