schauder wrote:
Das sollte aber eigentlich funktionieren, wie sieht denn dein Mapping der CreditCard Klasse aus? Kannst du CreditCard Objekte speichern und laden?
Einfügen, Updaten, Löschen, Laden für CreditCard-Objekte funktioniert.
Das Mapping von CreditCard sieht so aus:
Code:
@Entity
@DiscriminatorValue(value="2")
public class CreditCard extends BillingDetails implements Serializable {
}
========================
Code:
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
name = "BILLINGTYPE",
discriminatorType = DiscriminatorType.INTEGER
)
@Table(name = "T_BILLINGDETAILS", uniqueConstraints = {})
public abstract class BillingDetails {
@ManyToOne(targetEntity = User.class)
@JoinColumn(name = "USERID", referencedColumnName = "USERID", unique = false, nullable = false, insertable = true, updatable = false)
public User getUser() {
return this.user;
}
...
}
Ich habe das für mich jetzt erst einmal so gelöst, daß
über eine @Where - Annotation der Discriminator hinzufügt wird.
Trotzdem muß es einen Grund geben, warum hibernate nicht
von selbst den Discriminator hinzufügt.
Führe ich eine Query über CreditCard durch, sieht das SQL-Select
wie gewünscht aus, nämlich mit dem Discriminator-Wert in der
where-Bedingung. Also, aus
Code:
select c from CreditCard c
wird:
Code:
select * from BillingDetails where BILLINGTYPE = 2
Also, es bleibt für mich unklar, warum hibernate bei der Auflösung der
1:n Assoziation auf eine konkrete Klasse nicht den Discriminator mit einbezieht......