che diamine è una configurazione JPA?
-
06-07-2019 - |
Domanda
Sto impazzendo nel tentativo di ottenere un semplice Envers esempio per lavorare. Sono bloccato sul org.hibernate.tool.ant.EnversHibernateToolTask
& # 8212; sembra che finalmente ho ottenuto tutti i file jar di cui avevo bisogno, ma ora ricevo il messaggio di errore
[hibernatetool] Persistence unit not found: 'ConsolePU'.
BUILD FAILED
C:\deka\proj\java\test-database\build.xml:61: Persistence unit not found: 'ConsolePU'.
Per quanto ne so, le unità di persistenza sono associate ai file JPA persistence.xml
. Ma non sto usando un file persistence.xml; Sto usando hibernate.cfg.xml & # 8212; ma l'esempio envers ha un <jpaconfiguration>
nell'attività 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>
c'è qualcosa con cui posso sostituirlo per farlo funzionare con il file hibernate.cfg.xml? Sembra che ci sia documentazione ZERO su come far funzionare correttamente tutte queste cose.
modifica: OK, quindi il problema principale era che non capivo le opzioni di ibernatetool e ciò che era appropriato per la mia app. Ho trovato Hibernate ant docs , per fortuna. Grazie. Ora ho un nuovo problema: sto usando le annotazioni, ma ho anche impostato un hibernate.cfg.xml per le impostazioni delle proprietà. L'attività hibernatetool
mi consente di eseguire solo <configuration />
o <annotationconfiguration />
non entrambi, e anche <=> non funzionerà poiché ho già annotazioni che eseguono operazioni. Come posso migrare le mie impostazioni di proprietà dal file hibernate.cfg.xml alle mie annotazioni?
modifica: Duh, non mi ero reso conto che lo fai solo:
<annotationconfiguration configurationfile="...filename..." />
Soluzione
Sostituisci <jpaconfiguration />
con <configuration />
, come descritto nei documenti di Hibernate Tools:
<configuration
configurationfile="hibernate.cfg.xml"
propertyfile="hibernate.properties"
entityresolver="EntityResolver classname"
namingstrategy="NamingStrategy classname">
Altri suggerimenti
Solo per darti una prospettiva di alto livello.
JPA è un'API di persistenza standard fornita da SUN.
È possibile utilizzare qualsiasi framework di persistenza come Hibernate, TopLink, JDO ecc. Come provider di persistenza con JPA.
Quindi, solo per chiarire le cose
Il tuo codice ----- > JPA ----- & Gt; Persistence Provider (Hibernate).
Sarà buona pratica usare l'APP in quanto è una libreria standard.
Quindi, quali sono le informazioni del tuo fornitore di persistenza dovrebbero essere conosciute solo da JPA e non da XML specifici del tuo codice.
Ecco come apparirà il tuo 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>
E il tuo contesto di applicazione apparirà (dipendente da JPA, nessuna menzione di 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>
Devi iniziare dall'inizio: Tutorial JPA di Sun .
Anche questo potrebbe aiutare.
Devi creare persistence.xml e inserirlo nella directory META-INF per il tuo progetto.
Hibernate è un'implementazione concreta per JPA, ma ce ne sono altri (ad esempio, JDO).
È necessario che annotationconfiguration non jpaconfiguration.