трудности с получением простого примера для работы: задача № 34 - PullRequest
0 голосов
/ 23 июня 2009

Я пытаюсь заставить работать простой envers пример. У меня работает Java-код (по-видимому), и я наконец получил org.hibernate.tool.ant.EnversHibernateToolTask ​​для работы , но он выводит SQL только для «обычных» данных, а не для данных контроля версий. Я озадачен тем, что делать дальше.

Что я могу забыть включить?

Вот SQL, который он выводит: {versioning-ddl.sql}

create table Event (
    id bigint generated by default as identity (start with 1),
    date timestamp,
    title varchar(255),
    primary key (id)
);

create table Person (
    id bigint generated by default as identity (start with 1),
    age integer not null,
    firstname varchar(255),
    lastname varchar(255),
    primary key (id)
);

create table PersonEvent (
    eventID bigint not null,
    personID bigint not null,
    primary key (eventID, personID)
);

alter table PersonEvent
    add constraint FK489E5C25F6E47374
    foreign key (personID)
    references Event;

alter table PersonEvent
    add constraint FK489E5C25729F3820
    foreign key (eventID)
    references Person;

Я не вижу никаких таблиц / полей истории. Вот соответствующие записи в моем файле hibernate.cfg.xml:

<hibernate-configuration>
   <session-factory>
        ...
     <property name="hibernate.ejb.event.post-insert">org.hibernate.envers.event.AuditEventListener</property>
     <property name="hibernate.ejb.event.post-update">org.hibernate.envers.event.AuditEventListener</property>
     <property name="hibernate.ejb.event.post-delete">org.hibernate.envers.event.AuditEventListener</property>
     <property name="hibernate.ejb.event.pre-collection-update">org.hibernate.envers.event.AuditEventListener</property>
     <property name="hibernate.ejb.event.pre-collection-remove">org.hibernate.envers.event.AuditEventListener</property>
     <property name="hibernate.ejb.event.post-collection-recreate">org.hibernate.envers.event.AuditEventListener</property>
     <mapping class="com.example.test.hibernate.test1.Event"/>
     <mapping class="com.example.test.hibernate.test1.Person"/>
   </session-factory>
</hibernate-configuration>

и соответствующие части классов Java:

 @Entity
 @Audited
 public class Event {
    @Id
    @GeneratedValue
    private Long id;
    private String title;
    private Date date;
    ...
 }


 @Entity
 @Audited
 public class Person {  
   @Id
   @GeneratedValue
   private Long id;

   private int age;
   private String firstname;
   private String lastname;
   ...
 }

Ответы [ 3 ]

1 голос
/ 12 октября 2010

Обязательно аннотируйте свои POJO сущности с помощью "@Audited". Это может объяснить, почему не создается DDL для таблиц аудита.

0 голосов
/ 02 марта 2011

У вас явно отсутствует свойство для хранения данных управления версиями, например:

@Version
private Integer versionNumber;

// getters and setters
...
0 голосов
/ 09 августа 2009

Джейсон

У меня тоже есть эта проблема - у меня был Envers, работающий с Hibernate, если он был настроен с использованием стандарта JPA /META-INF/persistence.xml.

Когда я переключился на hibernate.cfg.xml, Envers больше не настраивался. Однако Envers поддерживает Hibernate Session, который я и пытаюсь использовать, поскольку он более мощный, чем стандартные спецификации JPA.

Кроме того, если вы не знаете, Envers также сгенерирует таблицы аудита для вас, все, что вам нужно, это аннотации.

Тем временем я все еще ищу ответ, но если вы можете жить без сеанса Hibernate, вы можете быстро запустить и запустить Envers, используя Hibernate в качестве поставщика JPA, настроенного с помощью /META-INF/persistence.xml .

Walter

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