开发者

JPA query for DTYPE

开发者 https://www.devze.com 2022-12-16 06:31 出处:网络
I have a single table which is generated from two jpa entities (inheritance). So we have a DTYPE column generated in the database table which has entity name has values.

I have a single table which is generated from two jpa entities (inheritance). So we have a DTYPE column generated in the database table which has entity name has values.

How do I write a jpa query to fetch data for any given entity. i.e DTYPE = 'A'?

I just tried using DTYPE in jpa query but as expected I got an error "Could not resolve property". Please let me know how to write this query.

Note - I dont want to use native query.

Update:

I have class A and subclass AA which extends A. DTYPE has two values A and AA.

When I query for A, I get all the A plus AA entities. How to exclude AA 开发者_如何转开发when I query for A?


Simply add a simple field dtype in your parent class.

@Column(insertable = false, updatable = false) private String dtype;

And so, you can use it in your JPQL query


Assuming you have three entities:

  • Party (superclass)
  • Person (extends Party)
  • Organization (extends Party)

where the last two are the two entities you store with a discriminator column, your JPA-QL query should be as simple as:

select p from Person p

to get all people. JPA is smart enough to figure it out. Likewise you can do:

select p from Party p

and get all of them.


You can use the entity names in your JPA queries, the discriminator column is abstracted away.

Suppose you have two entity classes SubClassA and SubClassB, which both inherit from SuperClass, then you can query for these entites like so:

FROM SubClassA WHERE [...]

or

FROM SubClassB WHERE [...]

If you want to query for both entities, use

FROM SuperClass WHERE [...]


In addition of what @SCH post, and as that didn't directly work for me, using Oracle, I was getting an Exception saying that "dtype" was kind of a reserved keyword. I then did

@DiscriminatorColumn(name = "myDType")
class abstract AbstractClass{

@Column(insertable = false, updatable = false) 
private String myDType; 
[...]

That worked fine for me, as this way I could dynamically change the Type I want to query using a where condition instead of changing the FROM statement.

0

精彩评论

暂无评论...
验证码 换一张
取 消