Me encontré con el mismo problema donde MS SQL Server quiere que el catálogo y el esquema estén definidos, pero HSQLDB no. Mi solución fue cargar un archivo personalizado de orm.xml (a través de persistence.xml) específicamente para MS SQL Server que establece el catálogo y el esquema.
1.Sólo especificar el nombre @Table (omitir cualquier información catálogo o esquema) para su entidad:
@Entity
@Table(name="CATEGORY")
public static class Category { ... }
2.Especifique dos nodos persistencia de unidades en el archivo 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.Specify el catálogo predeterminado y el esquema en el archivo 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 usando Spri ng para configurar la APP, así que utilice una propiedad de marcador de posición para el valor de la 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>
Para las pruebas de unidad, utilice 'com.mycompany.test' y para la integración-tests/despliegues de producción, uso 'com .mycompany.prod '.
Ya hay errores abiertos para esto: http: // opensource. atlassian.com/projects/hibernate/browse/HHH-1853 Pero aparentemente, a los desarrolladores no les gusta el parche (está abierto desde hace * tres años *, ahora). Esto me dice: nunca habrá una solución. Simplemente no les importa. Entonces necesito una solución. –
Es una pena, pero sucede: | . ¿Qué tipo de solución estás buscando? ¿Qué es subóptimo en el tuyo, el hecho de que tienes que crear el esquema o el hecho de que está colocado (supongo que por el código) en tu código de prueba? –
No estoy contento de tener que hacerlo en getConfigLocations(): este método hace algo completamente diferente y si alguien estaba buscando este código, este sería el último lugar para buscar. –