Wpadłem na ten sam problem, w którym MS SQL Server chce zdefiniować katalog i schemat, ale HSQLDB tego nie robi. Moim rozwiązaniem było załadowanie niestandardowego pliku orm.xml (przez persistence.xml) specjalnie dla MS SQL Server, który ustawia katalog i schemat.
1.Only określić @Table nazwę (pomijają żadnych katalogowy lub schematu info) dla jednostki:
@Entity
@Table(name="CATEGORY")
public static class Category { ... }
2.Specify dwa węzły wytrwałość-jednostkowych w META-INF pliku/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.Specify katalog domyślny i schemat w pliku orm-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 wykorzystaniem Wiosna ng do konfiguracji JPA, więc używam właściciela zastępczy dla wartości 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>
Dla testów jednostkowych, użyj „com.mycompany.test” i integracyjnych testów/wdrożenia produkcji, stosowania „com .mycompany.prod ".
Są już otwarte dla robaków to: http: // opensource. atlassian.com/projects/hibernate/browse/HHH-1853 Wygląda jednak na to, że deweloperzy nie lubią łatki (jest ona dostępna * przez trzy lata *). To mi mówi: nigdy nie będzie poprawki. Po prostu ich to nie obchodzi. Potrzebuję obejścia. –
To wstyd, ale się zdarza: | . Jakiego rodzaju rozwiązanie ich szukasz? Co jest podoptymalne w twoim - fakt, że musisz stworzyć schemat lub fakt, że jest on umieszczony (zakładam z kodu) w twoim kodzie testowym? –
Jestem niezadowolony, że muszę to zrobić w getConfigLocations() - ta metoda robi coś zupełnie innego i jeśli ktoś szukał tego kodu, byłoby to ostatnie miejsce do patrzenia. –