2009-06-23 18 views
0

J'essaye d'obtenir un exemple simple envers pour fonctionner. J'ai le code de Java fonctionnant (apparemment), et j'ai finalement got the org.hibernate.tool.ant.EnversHibernateToolTask to work, mais il produit seulement le SQL pour les données "régulières", pas les données de versioning. Je suis perplexe pour ce qu'il faut faire ensuite.difficultés pour obtenir un exemple de retourné simple au travail: problème # 34

Que pourrais-je oublier d'inclure?

Voici le SQL qu'il génère: {} 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; 

Je ne vois pas de tables histoire/champs. Voici les entrées pertinentes dans mon dossier 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> 

et les parties importantes des classes 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; 
    ... 
} 
+0

Quelles sont les versions de mise en veille prolongée et utilisez-vous Envers? –

Répondre

0

Jason,

J'ai cette question aussi - j'avais Envers travaillant avec Hibernate tant qu'il a été configuré en utilisant le standard JPA /META-INF/persistence.xml.

Lorsque je suis passé à hibernate.cfg.xml, Envers n'est plus configuré. Envers prend cependant en charge la session Hibernate, ce dont j'essaie de tirer parti, car elle est plus puissante que les spécifications JPA par défaut. En outre, au cas où vous ne le sauriez pas, Envers va générer les tables d'audit pour vous aussi, tout ce dont vous avez besoin sont les annotations. Je suis toujours à la recherche d'une réponse en attendant, mais si vous pouvez vivre sans la session Hibernate, vous pouvez faire fonctionner Envers rapidement en utilisant Hibernate en tant que fournisseur JPA configuré via/META-INF/persistance. xml.

Walter

+0

Si vous avez besoin d'une 'Session' au lieu d'un 'EntityManager', pourquoi n'utilisez-vous pas' EntityManager.getDelegate() '? – whiskeysierra

1

Assurez-vous annoter vos POJO entité avec "@Audited". Cela peut expliquer pourquoi le DDL pour les tables d'audit n'est pas créé.

0

Vous manquez apparemment une propriété pour stocker les données de versioning, telles que:

@Version 
private Integer versionNumber; 

// getters and setters 
...