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.
精彩评论