2017-10-26 2 views
0

Ich habe zwei jar-Dateien mit Entitäten in persistence.xml:Mehrere Hibernate Envers Revision Entity

<jar-file>/lib/model.jar</jar-file> 
    <jar-file>/lib/central-model.jar</jar-file> 

Zentral model.jar enthält einige Einheiten, die in model.jar subclasssed werden.

central-model.jar ist Teil einer CRUD-Anwendung und benötigt eine Revisionseinheit.

model.jar ist ebenfalls Teil einer CRUD-Anwendung und benötigt ebenfalls eine Revision Entity.

Die Tabellen befinden sich in verschiedenen Schemas, die über einen DatabaseLink verbunden sind. Es gibt also nur eine Persistenzeinheit.

Bereitstellen führt zu dem folgenden Fehler:

Caused by: org.hibernate.AnnotationException: Use of the same entity name twice: REVISIONEN 

Hat jemand laufen in eine solche Frage? Wie hast du das gelöst?

+1

Also beide model.jar und central-model.jar enthalten die Revisionseinheit? – Wabi

+0

Ja, das tun sie. Revision-Entity von model.jar zeigt auf ab-Tabelle in einem Datenbankschema, Revision-Entity von central-model.jar zeigt auf ein anderes Datenbankschema. – sws

+0

Vielen Dank für Ihre Antworten. Wie @Naros angenommen hat, habe ich es mit @RevisionEntity zu tun. Leider sind zwei PersistencContexte nicht möglich, da ich vom Zentralmodell zum Modell unterklassiere. Es sieht so aus, als müsste ich eine andere Lösung dafür suchen. – sws

Antwort

0

Sie benötigen Entitätsnamen in beiden JAR-Dateien zu überschreiben, Hibernate zu erlauben, einen Unterschied zwischen ihnen zu machen:

in model.jar:

@Entity(name="prefixA.Revision") 
public class Revision {} 

in Zentral model.jar:

@Entity(name="prefixB.Revision") 
public class Revision {} 

In Abfragen dann verwenden:

createQuery("from prefixA.Revision") 
1

Es hängt davon ab, was Sie implizieren, wenn Sie den Begriff Revisionseinheit verwenden.

Da Ihre Frage mit hibernate-envers markiert ist, gehe ich davon aus, dass Sie sich auf eine Entität beziehen, die mit @RevisionEntity gekennzeichnet ist. Wenn das genau ist, dann ist das, was Sie beschreiben, nicht möglich, zumindest nicht in einer einzelnen Persistenzeinheit.

Die einzige Möglichkeit, mehrere @RevisionEntity annotierte Klassen zu unterstützen, besteht darin, sie in ihre eigenen Persistenzeinheiten zu unterteilen.

Wenn Sie nicht auf das Obige Bezug nehmen und ein Szenario beschreiben, in dem Sie zwei Entitäten mit demselben Namen, aber unterschiedlichen Klassen haben, müssen Sie dem Ratschlag von @Wabi folgen und jedem einen eindeutigen Namen geben erlaube Hibernate, sie zu unterscheiden.

Verwandte Themen