ds2799
ds2799

Reputation: 69

Hibernate generates query with wrong type of @discriminatorvalues of subclasses

I have an inheritance relationship of entities with joined type.

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

}

When I'm trying to use a named query such as

SELECT s.class AS subscriptiontype,
FROM
Subscription s

It is resulting in the following query

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

Which throws an error as below.

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

As I noticed, there are no tags around the case statement in generated query, on manually firing this query with tags around the DiscriminatorValue 'com.xxx.XXXSubscription', the query is running fine.

Can someone please help ??

Upvotes: 1

Views: 437

Answers (1)

Mithat Konuk
Mithat Konuk

Reputation: 457

try this you can define super class with @inheritance annotation

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

}

Upvotes: 1

Related Questions