2012-04-12 9 views
0

Implementierung habe ich eine Klasse Problem und dann verschiedene andere Klassen, die die Basisklasse Solution wie BasicSolution, ExpertSolution, viele andere Lösung Unterklassen erweitern. Die Klasse Problem ist ein "Fremdschlüssel" für die verschiedenen Lösungsklassen, obwohl die Klasse Problem die Lösungsliste nicht benötigt.eine Fremdschlüsselbeziehung in Hibernate

Also ich will Fremdschlüssel von Problem Tabelle in verschiedenen Lösungstabellen (eine Tabelle pro Lösung Unterklasse). Wie kann ich es durch Hibernate erreichen?

Ich weiß, dass dies aus der Perspektive von Hibernate nicht das richtige DB-Design ist, aber es ist ein Legacy-System und kann nicht optimiert werden. Ich kenne One-to-Many-Entity Assoziation, aber das wird einige Solution-Liste benötigt, um in Problem-Klasse vorhanden sein (was ich nicht will).

Können Sie bitte eine Antwort auf dieses Problem vorschlagen?

Antwort

1

Sie benötigen die Beziehung in der Lösung Basisklasse mit @ManyToOne Verein zur Karte:

@Entity 
@Inheritance(strategy=InheritanceType.JOINED) 
public abstract class Solution { 
... 
    private Problem _problem; 

    @ManyToOne 
    @JoinColumn(name="PROBLEM_ID") 
    public Problem getProblem() { 
     return _problem; 
    } 
... 
} 

Alle Lösungsunterklassen wird die Beziehung Problem haben.

Sie können auch @OneToOne anstelle von @ManyToOne verwenden, der Unterschied besteht darin, dass @ManyToOne den Fremdschlüssel auf dieser Seite der Beziehung haben muss.

+0

Ein Problem kann mehrere Lösungen haben, daher gibt es in Lösungstabellen (mehrere Tabellen pro Tabelle für jeden Lösungstyp) einen Fremdschlüssel für die Problemtabelle. Das Problem besteht nun darin, dass Sie keine Instanzen der Lösung in der Problemklasse benötigen. – Ashish

+0

Ok jetzt verstehe ich besser, ich bearbeite die Antwort für Ihren Fall, danke Ihnen – Teg

Verwandte Themen