Ich stieß auf das gleiche Problem, wo MS SQL Server möchte, dass der Katalog und das Schema definiert, aber HSQLDB nicht. Meine Lösung bestand darin, eine benutzerdefinierte Datei orm.xml (via persistence.xml) speziell für MS SQL Server zu laden, die den Katalog und das Schema festlegt.
1.Only geben Sie den Namen @Table (weglassen jeden Katalog oder Schema info) für Ihr Unternehmen:
@Entity
@Table(name="CATEGORY")
public static class Category { ... }
2.Geben zwei Persistenz-Einheit Knoten in Ihrem META-INF/persistence.xml Datei
<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 der Standardkatalog und das Schema in der ORM-mssql.xml Datei:
<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 mit Spri ng JPA zu konfigurieren, so dass ich eine Eigenschaft-Platzhalter für den Wert des 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>
Für Unit-Tests verwenden 'com.mycompany.test' und für die Integration-Tests/Produktionsimplementierungen, Einsatz ‚com .meinefirma.prod '.
Es gibt bereits Bugs offen für diese: http: // Open Source. atlassian.com/projects/hibernate/browse/HHH-1853 Aber anscheinend mögen die Entwickler den Patch nicht (er ist jetzt für * drei Jahre * offen). Das sagt mir: Es wird nie eine Lösung geben. Es interessiert sie einfach nicht. Also brauche ich einen Workaround. –
Das ist eine Schande, aber es passiert: | . Nach welcher Art von Lösung suchst du sie? Was ist in Ihrem sub-optimal - die Tatsache, dass Sie das Schema oder die Tatsache, dass es platziert ist (ich vermute von dem Code) in Ihrem Testcode erstellen? –
Ich bin unglücklich, dass ich es in getConfigLocations() tun muss - diese Methode macht etwas ganz anderes und wenn jemand nach diesem Code suchen würde, wäre dies der letzte Ort, an dem man suchen müsste. –