2010-03-04 9 views
7

Ich habe eine Person-Entität, die von Hibernate einer Datenbanktabelle in einem Datenbankkatalog "Active" zugeordnet wurde. Nach einer gewissen Zeit werden Datensätze in dieser Datenbanktabelle im "Aktiven" Katalog archiviert/in eine exakte Kopie der Tabelle in einem Datenbankkatalog "History" verschoben. Ich muss sowohl den Aktiv- als auch den Verlaufskatalog abrufen. Gibt es eine bessere Möglichkeit, dies mit Hibernate-Annotationen zu modellieren, als eine abstrakte Klasse zu erstellen, von der 2 Klassen ausgehen?Hibernate-Annotation für Entität, die in mehr als 1 Katalog vorhanden ist

Dies ist, was ich jetzt habe.

@MappedSuperclass 
public abstract class Person { 

    @Id 
    private Integer id; 
    private String name; 
} 

@Entity 
@Table(name="Person", catalog="Active") 
public class PersonActive extends Person { 
} 

@Entity 
@Table(name="Person", catalog="History") 
public class PersonHistory extends Person { 
} 

Antwort

1

Mein Wissen, das den richtigen Weg wäre es mit Anmerkungen zu tun (man irgendwie habe zwei Tabellen, so dass Sie zwei Entitäten benötigen). Führen Sie anschließend eine polymorphe Abfrage für die Entität Person aus. Ich finde das übrigens ziemlich sauber.

PS: Können Sie einen Zeiger hinzufügen, wie dies mit Mapping-Dateien zu tun ist, bin ich wirklich neugierig.

+1

Danke für die Einsicht. In der Vergangenheit, als ich diese Geschäftsanforderung mit anderen Projekten hatte, für die ich Spring JDBC verwendete, hatte ich nur einen Klassen- und einen Zeilenmapper für beide Tabellen. Ich habe es vorher nicht mit Hibernate getan, aber hier ist ein Beispiel http://old.nabble.com/Mapping-Class-to-Multiple-Tables-mit-entity-name-(hibernate-Plugin)- to9547563.html (...) (...)

0

Ich denke, es gibt ein Unterprojekt von Hibernate namens Shards. Es wurde entwickelt, um mit mehreren relationalen Datenbanken zu arbeiten. Wenn Sie es verwenden möchten, benötigen Sie möglicherweise große Änderungen in Ihrem Code.

0

Mein Gedanke wäre, eine Abfrage zu schreiben, um beide Tabellen aus db A und B auszuwählen. Erstellen Sie dann eine Abfrage mit Hibernate und ordnen Sie sie Ihrer Klasse zu.

Beispiel:

@Entity 
@NamedNativeQuery(
name="GetAllPerson", 
query="select * from A.Person inner join B.Person on A.Person.Id = B.Person.Id" 
) 
public class Person { 
... 
} 

nicht sicher, ob es funktionieren kann, Ihre Frage hat mich über die beste Art und Weise auch neugierig, es zu tun :). Ich werde es heute Abend nach der Arbeit testen und sehen, ob es gut ist.