Я столкнулся с той же проблемой, когда MS SQL Server хочет, чтобы каталог и схема были определены, но HSQLDB этого не делает. Моим решением было загрузить собственный файл orm.xml (через persistence.xml) специально для MS SQL Server, который устанавливает каталог и схему.
1.Only указать @Table имя (опускаем любой каталог или схемы данные) для объекта:
@Entity
@Table(name="CATEGORY")
public static class Category { ... }
2.Укажите два узла живучесть-единицы в вашем META-INF/persistence.xml файл
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<!--
| For production and integration testing we use MS SQL Server, which needs
| the catalog and schema set (see orm-mssql.xml).
|-->
<persistence-unit name="com.mycompany.prod">
<mapping-file>META-INF/orm-mssql.xml</mapping-file>
</persistence-unit>
<!--
| For unit testing we use HSQLDB, which does not need the catalog or schema.
|-->
<persistence-unit name="com.mycompany.test" />
</persistence>
3.В каталог по умолчанию и схемы в файле ОРМ-mssql.xml:
<entity-mappings version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd">
<persistence-unit-metadata>
<!--
| Set the catalog and schema for MS SQL Server
|-->
<persistence-unit-defaults>
<schema>MYSCHEMA</schema>
<catalog>MYCATALOG</catalog>
</persistence-unit-defaults>
</persistence-unit-metadata>
</entity-mappings>
4.I'm с использованием SPRI нг настроить JPA, поэтому я использую свойство-заполнитель для значения persistenceUnitName:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
<property name="persistenceUnitName" value="${entityManagerFactory.persistenceUnitName}" />
</bean>
Для модульных тестов, используйте «com.mycompany.test» и для интеграции-тесты/развертывание производства, использование «ком .mycompany.prod.
Есть уже ошибки, открытые для этого: HTTP: // с открытым исходным кодом. atlassian.com/projects/hibernate/browse/HHH-1853 Но, по-видимому, разработчикам не нравится патч (он открыт для * трех лет *, сейчас). Это говорит мне: никогда не будет исправления. Им просто все равно. Так что мне нужно обходное решение. –
Это позор, но это происходит: | , Какое решение вы ищете? Что является субоптимальным в вашем - тем фактом, что вам нужно создать схему или тот факт, что она помещена (я полагаю, из кода) в вашем тестовом коде? –
Я недоволен тем, что мне нужно сделать это в getConfigLocations() - этот метод делает что-то совсем другое, и если кто-то ищет этот код, это будет последнее место для поиска. –