2016-08-07 3 views
1

У меня есть отношение наследования объектов с объединенным типом.Hibernate генерирует запрос с неправильным типом @discriminatorvalues ​​подклассов

@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 { 

} 

Когда я пытаюсь использовать именованный запрос, такие как

SELECT s.class AS subscriptiontype, 
FROM 
Subscription s 

Это приводит к следующему запросу

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 

Который выдает ошибку, как показано ниже.

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

Как я заметил, нет метки вокруг саза в сгенерированном запросе вручную стреляя этот запрос с помощью тегов по всему DiscriminatorValue «com.xxx.XXXSubscription», запрос работает нормально.

Может кто-то помочь?

+0

на мой взгляд, вам нужно использовать тег @inheritance на суперкласса этот путь подклассы просто нужно @discriminatorvalue («») –

ответ

1

попробовать это вы можете определить супер класс с @inheritance аннотацию

@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 { 

} 
Смежные вопросы