2016-08-07 24 views
1

Ich habe eine Vererbungsbeziehung von Entitäten mit verbundenen Typ.Hibernate generiert Abfrage mit falschem @ discriminatorvalues ​​der Unterklassen

@Entity 
@Table(name = "MSM_SUBSCRIPTION") 
@DiscriminatorColumn(name = "SUBSCRIPTIONTYPE", discriminatorType = DiscriminatorType.STRING, length = 100) 
class subscription { 
} 


@DiscriminatorValue("com.xxx.XXXSubscription") 
@Table(name = "XXX") 

public class XXXSubscription extends Subscription implements Serializable { 

} 

Wenn ich versuche, eine benannte Abfrage zu verwenden, wie

SELECT s.class AS subscriptiontype, 
FROM 
Subscription s 

Es wird in der folgenden Abfrage

select 

     case 

      when s1_.subscriptionId is not null then com.xxx.XXXSubscription 
      when s.subscriptionId is not null then 'Subscription' 
     end AS subscriptiontype, 

    from 

     MSM_SUBSCRIPTION s 

    left outer join 
     XXXSubscription s1_ 
      on s.subscriptionId=s6_.subscriptionId 

, die einen Fehler wirft, wie unten führt.

-ORA-00904: "COM"."xxx"."MMSSUBSCRIPTION": invalid identifier 

Wie ich bemerkt haben, gibt es keine Tags um die Case-Anweisung in generierten Abfrage manuell diese Abfrage mit Tags um die ‚com.xxx.XXXSubscription‘ DiscriminatorValue abfeuern, die Abfrage läuft gut.

Kann mir bitte jemand helfen ??

+0

meiner Meinung nach müssen Sie @inheritance Tag auf Super-Klasse auf diese Weise Subklassen müssen nur @discriminatorvalue („“) verwenden, –

Antwort

1

versuchen diese Sie können Superklasse definieren mit @inheritance Anmerkung

@Entity 
@Table(name = "MSM_SUBSCRIPTION") 
**@Inheritance(strategy = InheritanceType.SINGLE_TABLE)** 
@DiscriminatorColumn(name = "SUBSCRIPTIONTYPE", discriminatorType = DiscriminatorType.STRING, length = 100) 
class subscription { 
} 


@DiscriminatorValue("com.xxx.XXXSubscription") 
@Table(name = "XXX") 

public class XXXSubscription extends Subscription implements Serializable { 

}