¿Qué diablos es una configuración JPA?
-
06-07-2019 - |
Pregunta
Me estoy volviendo loco tratando de obtener un simple Envers ejemplo para trabajar. Estoy atascado en el org.hibernate.tool.ant.EnversHibernateToolTask
& # 8212; parece que finalmente obtuve todos los archivos jar que necesitaba, pero ahora recibo el mensaje de error
[hibernatetool] Persistence unit not found: 'ConsolePU'.
BUILD FAILED
C:\deka\proj\java\test-database\build.xml:61: Persistence unit not found: 'ConsolePU'.
Por lo que puedo decir, las unidades de persistencia están asociadas con archivos JPA persistence.xml
. Pero no estoy usando un archivo persistence.xml; Estoy usando hibernate.cfg.xml & # 8212; pero el ejemplo de envers tiene un <jpaconfiguration>
en la tarea ant:
<hibernatetool destdir=".">
<classpath>
<fileset dir="src/">
<include name="**/*.hbm.xml"/>
</fileset>
<path location="${buildDir}" />
</classpath>
<jpaconfiguration persistenceunit="ConsolePU" />
<hbm2ddl
drop="false"
create="true"
export="false"
outputfilename="versioning-ddl.sql"
delimiter=";"
format="true"/>
</hibernatetool>
¿hay algo con lo que pueda reemplazarlo para que funcione con el archivo hibernate.cfg.xml? Parece que hay documentación CERO sobre cómo hacer que todo esto funcione correctamente.
editar: OK, por lo que el principal problema era que no entendía las opciones de hibernatetool y lo que era apropiado para mi aplicación. Encontré el Hibernate ant docs Afortunadamente. Gracias. Ahora tengo un nuevo problema: estoy usando anotaciones, pero también he configurado un hibernate.cfg.xml para la configuración de propiedades. La tarea hibernatetool
solo me permite ejecutar <configuration />
o <annotationconfiguration />
no ambos, e incluso <=> no funcionará ya que ya tengo anotaciones haciendo cosas. ¿Cómo puedo migrar la configuración de mi propiedad del archivo hibernate.cfg.xml a mis anotaciones?
editar: Duh, no me di cuenta de que acabas de hacer:
<annotationconfiguration configurationfile="...filename..." />
Solución
Reemplace el <jpaconfiguration />
con el <configuration />
etiqueta, como se detalla en los documentos de Hibernate Tools:
<configuration
configurationfile="hibernate.cfg.xml"
propertyfile="hibernate.properties"
entityresolver="EntityResolver classname"
namingstrategy="NamingStrategy classname">
Otros consejos
Solo para darle una perspectiva de alto nivel
JPA es la API de persistencia estándar proporcionada por SUN.
Puede usar cualquier marco de persistencia como Hibernate, TopLink, JDO, etc. como proveedor de persistencia con JPA.
Así que para aclarar las cosas
Su código ----- > JPA ----- & Gt; Proveedor de persistencia (Hibernate).
Será una buena práctica usar JPA, ya que es una biblioteca estándar.
Entonces, ¿cuál es la información de su proveedor de persistencia solo debe ser conocida por JPA y no por su código XML específico?
Así se verá su persistence.xml
<persistence version="1.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_1_0.xsd">
<persistence-unit name="QuarkFrameworkPU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
</persistence-unit>
Y el contexto de su Aplicación se verá así (Dependiendo de JPA, sin mención de Hibernate)
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="com.mysql.jdbc.Driver" p:url="${db.url}" />
<!-- ADD PERSISTENCE SUPPORT HERE (jpa,etc) -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="QuarkFrameworkPU" />
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
</bean>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<property name="dataSource" ref="dataSource" />
</bean>
Debe comenzar desde el principio: Tutorial JPA de Sun .
Esto también podría ayudar.
Necesita crear persistence.xml y ponerlo en el directorio META-INF para su proyecto.
Hibernate es una implementación concreta para JPA, pero hay otras (por ejemplo, JDO).
Necesita una configuración de anotación, no una configuración de jpa.