2017-05-03 1 views
1

Ich erstelle Hibernate-Entitäten über Tabellen in der Datenbank.Hibernate @Audited: NOT_AUDITED kann nicht in eine Variable aufgelöst werden

Entity A bezieht Einheit B

@Entity 
@Table(name="TABLE_A") 
@NamedQuery(.. query="SELECT n FROM EntityA n") 
public class EntityA { 
.... 
@ManyToOne(...) 
@JoinColumn(...) 
private EntityB b; 


@Entity 
@Table(name ="TABLE_B") 
@NamedQuery(.. query="SELECT n FROM EntityB n") 
public class EntityB { 
... 

Das einzige Problem ist, dass die Entität mit @Audited Annotation markiert (org.hibernate.envers.Audited), während der Entität nicht.

Bei der Veröffentlichung der Anwendung, ich erhalte die folgenden Fehler in dem Stack-Trace:

Verursacht durch: org.hibernate.MappingException: eine revidierte Beziehung von der Entität auf ein nicht geprüfte Unternehmen Entität! Eine solche Zuordnung ist möglich, , muss jedoch explizit mit @Audited (targetAuditMode = NOT_AUDRITED) definiert werden.

Wenn i @Audited(targetAuditMode = NOT_AUDITED) oben private EntityB b hinzufügen Eclipse gibt ich die folgenden Fehler

NOT_AUDITED kann nicht auf eine Variable

Wie aufgelöst werden kann ich dieses Problem lösen?

+0

Haben Sie envers jars eingeschlossen? Abhängigkeit? –

+0

ja; Sonst würde Eclipse bei @Audited Annotation einen Fehler verursachen, aber das ist nicht der Fall –

Antwort

1

Wenn i @Audited(targetAuditMode = NOT_AUDITED) oben private EntityB b hinzufügen Eclipse gibt mir die folgenden Fehler

NOT_AUDITED kann nicht auf eine Variable

Sie verwenden targetAuditMode nicht richtig aufgelöst werden:

@Audited(targetAuditMode = NOT_AUDITED) 

Ist falsch, sollten Sie RelationTargetAuditMode.NOT_AUDITED und nicht nur NOT_AUDITED verwenden, weil RelationTargetAuditMode ist ein ENUM, so dass wir RelationTargetAuditMode.CONSTANT_NAME verwenden, um auf die Werte seiner Konstanten zuzugreifen.

So soll es sein:

@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) 

Dokumentation:

Und das können wir aus den Hibernate Envers - Easy Entity Auditing Configuration, wo es zeigt, wie Sie die targetAuditMode Eigenschaft verwenden:

Wenn Sie möchten eine Beziehung prüfen, in der die Zieleinheit nicht geprüft wird (dies ist z. B. bei Dictionary-ähnlichen Entitäten der Fall, die dies nicht tun) ändern und müssen nicht auditiert werden), notieren Sie es einfach mit @Audited (targetAuditMode = RelationTargetAuditMode.NOT_AUDITED). Wenn Sie dann historische Versionen Ihrer Entität lesen, zeigt die Beziehung immer auf die "aktuelle" verwandte Entität.

Verwandte Themen