开发者

JPQL exclude subclasses in a query

If I have a class Apple that extends Fruit, how do I write a JPQL query to return all objects tha开发者_JAVA百科t are strictly Fruits and not Apples?


This is possible in JPA 2.0 using the TYPE operator. From the JPA 2.0 specification:

4.6.17.4 Entity Type Expressions

An entity type expression can be used to restrict query polymorphism. The TYPE operator returns the exact type of the argument.

The syntax of an entity type expression is as follows:

entity_type_expression ::=
        type_discriminator |
        entity_type_literal |
        input_parameter
type_discriminator ::=
        TYPE(identification_variable |
             single_valued_object_path_expression |
             input_parameter )

An entity_type_literal is designated by the entity name.

The Java class of the entity is used as an input parameter to specify the entity type.

So you could do something like this:

SELECT f
FROM Fruit f
WHERE TYPE(f) <> Apple

But this is not available in JPA 1.0 and if you are using JPA 1.0, you'd have to rely on a provider specific extension (please mention your provider in that case).

References

  • JPA 2.0 Specification
    • Section 4.4.8 "Polymorphism"
    • Section 4.6.17.4 "Entity Type Expressions"
0

上一篇:

下一篇:

精彩评论

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

最新问答

问答排行榜