2016-06-25 17 views
0

Ich Abbilden eine vorhandene Datenbank, die ein paar Tabellen mit den folgenden Feldern hat: Aufgabe (Tabelle) EXTERNAL_ID int (100) class_name varchar (300)Wie dynamische Last Entity basierend auf ID und Klassennamen überwintern

diese Felder stellt eine Klassenhierarchie, können sie Gruppen oder Benutzer eine einzelne Tabelle könnte wie Werte haben:

external_id class_name 
1   com.mycompany.User 
3   com.mycompany.User 
1   com.mycompany.Group 

Die Hierarchie Klasse ist dies:

User extends TaskExecutor 
Group extends TaskExecutor 

Einer der Tabelle in der Datenbank Task

class Task{ 
    TaskExecutor taskExecutor 
    .... 
} 

es möglich ist, Hibernate zu konfigurieren, dass der Proxy für die richtige Klasse instanziiert auf der class_name Datenbank Attribut basiert?

User und Group Klasse verfügen über eine separate Tabelle auf der Datenbank

Antwort

0

Sie können eine typisierte Klassenhierarchie mit Hibernate erstellen:

@Entity 
@Table(name = "main_table") 
@Inheritance(strategy = InheritanceType.JOINED) 
@DiscriminatorColumn(name = "class_name") // The column to store the type 
public abstract class AbstractMainTable { 
    // Your entity declaration here 

    // The type must be declared with insertable and updatable to false 
    // or it can be omitted completely if not necessary 
    @Column(name = "class_name", insertable = false, updatable = false) 
    private String className; 

} 

Dann können Sie Ihre

@Entity 
@Table(name = "extended_table") 
@DiscriminatorValue(value = "myClassType") // Optional, the type value stored in the column IF different from the real classname 
public class MyClass extends AbstractMainTable { 
    // This automatically inherits the fields from AbstractMainTable 
} 
+0

verlängern erklären Sie unter meine Frage noch einmal Ich habe weitere Details hinzugefügt. Es ist eine existierende Datenbank und Benutzer- und Gruppentabellen sind bereits vorhanden. –

+0

Geben Sie ein vollständiges Beispiel mit mindestens zwei Tabellen, deren Schema und Daten. Weil ich momentan nicht sehe, wie meine Antwort nicht passt. –

Verwandte Themen