какого черта конфигурация JPA? - PullRequest
0 голосов
/ 20 июня 2009

Я схожу с ума, пытаясь заставить работать простой Envers пример. Я застрял на org.hibernate.tool.ant.EnversHibernateToolTask & mdash; похоже, я наконец-то получил все необходимые мне файлы jar, но теперь я получаю сообщение об ошибке

[hibernatetool] Persistence unit not found: 'ConsolePU'.

BUILD FAILED
C:\deka\proj\java\test-database\build.xml:61: Persistence unit not found: 'ConsolePU'.

Насколько я могу судить, единицы персистентности связаны с файлами JPA persistence.xml. Но я не использую файл persistence.xml; Я использую hibernate.cfg.xml & mdash; но в примере с envers в муравейной задаче есть <jpaconfiguration>:

<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>

Есть ли что-то, чем я могу заменить его, чтобы заставить его работать с файлом hibernate.cfg.xml? Кажется, есть нулевая документация о том, как заставить все это работать должным образом.

edit: ОК, поэтому основная проблема заключалась в том, что я не понимал параметры hibernatetool и то, что подходило для моего приложения. К счастью, я нашел Документы на спящего муравья . Благодарю. Теперь у меня появилась новая проблема: я использую аннотации, но я также настроил файл hibernate.cfg.xml для настроек свойств. Задача hibernatetool позволяет мне запускать либо <configuration />, либо <annotationconfiguration />, но не оба, и даже <configuration /> не будет работать, поскольку у меня уже есть аннотации, выполняющие какие-то действия. Как я могу перенести настройки своего свойства из файла hibernate.cfg.xml в мои аннотации?

редактировать: Да, я не понял, вы просто делаете:

<annotationconfiguration configurationfile="...filename..." />

за документов задач hibernatetool.

Ответы [ 4 ]

8 голосов
/ 20 июня 2009

Замените <jpaconfiguration /> на тег <configuration />, как подробно описано в документах Hibernate Tools:

<configuration
    configurationfile="hibernate.cfg.xml"
    propertyfile="hibernate.properties"
    entityresolver="EntityResolver classname"
    namingstrategy="NamingStrategy classname">
5 голосов
/ 20 июня 2009

Просто чтобы дать вам высокий уровень перспективы. JPA - это стандартный API персистентности, предоставляемый SUN.
Вы можете использовать любой каркас персистентности, такой как Hibernate, TopLink, JDO и т. Д., В качестве поставщика персистентности с JPA.

Итак, чтобы прояснить ситуацию

Ваш код -----> JPA -----> Постоянный провайдер (Hibernate).

Рекомендуется использовать JPA, поскольку это стандартная библиотека.

Так что информация о вашем поставщике персистентности должна быть известна только JPA, а не конкретному XML-коду вашего кода.

Вот так будет выглядеть ваш файл 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>

И контекст вашего приложения будет выглядеть (в зависимости от JPA, без упоминания о 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>
1 голос
/ 21 июня 2009

Вам нужна конфигурация аннотации, а не jpaconfiguration.

1 голос
/ 20 июня 2009

Вам нужно начать с начала: Учебник по JPA от Sun .

Это также может помочь.

Вам нужно создать файл persistence.xml и поместить его в каталог META-INF для вашего проекта.

Hibernate - это одна конкретная реализация для JPA, но есть и другие (например, JDO).

...