JPQL: Receiving a Collection in a Constructor Expression

前端 未结 3 1243
没有蜡笔的小新
没有蜡笔的小新 2020-12-09 10:34

I\'m using JPQL and want to receive some normal parameters and a collection in a Constructor Expression to directly create the DTO-objects. But if the Collection is empty, I

3条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-09 11:32

    This is not an answer.

    The JPA 2.0 spec doesn't, as far as i can see, allow the use of collections as parameters in constructor expressions. Section 4.8 defines a constructor expression like this:

    constructor_expression ::=
            NEW constructor_name ( constructor_item {, constructor_item}* )
    constructor_item ::=
            single_valued_path_expression |
            scalar_expression |
            aggregate_expression |
            identification_variable
    

    A single_valued_path_expression is what it sounds like - a property expression that points to a scalar of some sort (such as p.id), a scalar_expression is also an expression that points to scalar, an aggregate_expression is the application of a function like sum which reduces a multi-valued expression to a scalar one, and an identification_variable is a reference to the type you're querying over. None of which can be collection-valued. Assuming i've read the spec right.

    So, if your JPA provider lets you use collection-valued parameter in a constructor expression, it's because it's going above and beyond the spec. Which is very nice of it, but not something you can necessarily rely on!

提交回复
热议问题