Невозможно заставить JPA работать с Hibernate - PullRequest
1 голос
/ 15 августа 2010

Для проекта выходного дня я пытался запустить JPA 2 с Hibernate 3.5. Обратите внимание, что я не получаю никаких ошибок компиляции или исключений времени выполнения (когда я развертываю войну на Tomcat). Ниже мой код -

persistence.xml

<persistence 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"
    version="2.0">
    <persistence-unit name="postage" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"></property>
            <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/postage"></property>
            <property name="hibernate.connection.username" value="postage"></property>
            <property name="hibernate.connection.password" value="postage"></property>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"></property>
            <property name="hibernate.hbm2ddl.auto" value="create-drop"></property>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.ejb.cfgfile" value="/hibernate.cfg.xml"></property>
        </properties>
    </persistence-unit>
</persistence>

hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="current_session_context_class">thread</property>
        <!-- mapping files -->
        <mapping class="net.rocky.postage.domain.Post"/>
        <mapping class="net.rocky.postage.domain.User"/>
    </session-factory>
</hibernate-configuration>

У меня есть 2 простых класса сущностей -

@Entity
@Table(name="Post")
public class Post implements Serializable{

    @Id
    @GeneratedValue
    private long id;

    private String description;

    private String comments;

    @OneToOne
    private User postedBy;

И

@Entity
@Table(name="PostageUser")
public class User implements Serializable{

    @Id
    @GeneratedValue
    private long id;

    private String username;

    private String password;

Я что-то здесь упускаю? Я провел всю субботу, пробуя все комбинации. Пожалуйста, помогите мне.

Продолжение 1 : Под неработающим я имею в виду - при развертывании приложения на Tomcat я не вижу 2 таблиц, созданных в Postgres (как я дал create-drop в hbm2ddl).

Продолжение 2 : Спасибо за ваш ответ. Я даже не могу получить Hibernate для записи сообщений. Вот мой конфиг:

log4j.appender.S=org.apache.log4j.ConsoleAppender
log4j.appender.S.layout=org.apache.log4j.PatternLayout
log4j.appender.S.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n
log4j.rootCategory=DEBUG, S

Также в Maven я добавил -

         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
             <version>1.6.1</version>
         </dependency>
         <dependency>
             <groupId>log4j</groupId>
             <artifactId>log4j</artifactId>
             <version>1.2.16</version>
         </dependency>

по-прежнему нет сообщений журнала из спящего режима

Ответы [ 2 ]

1 голос
/ 19 августа 2010

Я наконец-то заработал ... я изменил свои зависимости на -

     <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>3.3.2.GA</version>
    </dependency>       
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>3.3.2.GA</version>
    </dependency>       <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-annotations</artifactId>
        <version>3.3.1.GA</version>
    </dependency>

раньше это было - org.hibernate Зимуют-жильный 3.5.x

Помните, 3.5 док говорит, что он объединил EM и Аннотации в ядре, поэтому я хотел использовать его.


Когда я настроил источник данных через Spring, он дал мне класс not found org.hibernate.ejb.HibernatePersistence (это был мой провайдер JPA)

В ходе дальнейшего расследования я обнаружил, что репозиторий JBoss maven (https://repository.jboss.org/nexus/content/groups/public) имел банки jibernate 3.5, но банка неверна (скажем, размер X МБ), но когда вы загружаете двоичные файлы hibernate с сайта, они имеют размер Y МБ. Кроме того, pom этого jar-файла не определяет правильные зависимости (которые вы получите, если загрузите дистрибутив в комплекте прямо с сайта Hibernate).

Для меня это было своего рода соглашение, и мне пришлось переключиться обратно на 3.3, чтобы все заработало без ошибок.

Может быть, это кому-нибудь поможет, и, возможно, Hibernate 3.5 на Maven будет исправлен. Эта проблема также поднималась на форумах Hibernate.

1 голос
/ 15 августа 2010

Я не смог обнаружить очевидную ошибку в сопоставлениях или конфигурации (хотя обычно вы должны использовать источник данных при работе в контейнере, но ваша конфигурация может работать).Но вот некоторые предложения или идеи:

  • Расскажите подробнее о структуре и упаковке вашего приложения (где находится persistence.xml?).
  • Включите ведение журнала отладки:
    • для категории org.hibernate.tool.hbm2ddl
    • и, возможно, даже для всей категории org.hibernate до тех пор, пока она не заработает
  • Запустите тест JUnit (внеконтейнер), это облегчит отладку.

Продолжение: Я не вижу никакого регистратора для Hibernate, определенного в вашей конфигурации журналирования.Вам нужно добавить следующее для категории org.hibernate.tool.hbm2ddl:

log4j.logger.org.hibernate.hbm2ddl=debug

Я также хотел бы знать, где находится ваш persistence.xml в вашем проекте Maven.

Ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...