It is better if the On() returns the Join instance. This allows for
chaining of the Criteria query calls and follows an existing pattern we
used in Criteria Queries (eg, Coalesce)
--Gordon
Linda DeMichiel wrote:
>
>
> On 3/17/2011 9:42 AM, Rainer Kwesi Schweigkoffer wrote:
>> Hi Linda, all,
>>
>> Linda DeMichiel, am 11 Mar 2011 hast Du um 13:30 zum Thema
>> "[jsr338-experts] outer joins with ON conditions" geschrieben :
>>
>>> For the criteria API equivalent, we could add methods
>>>
>>> on(Expression<Boolean> restriction);
>>> and
>>>
>>> on(Predicate... restriction);
>>>
>>> to the Join interface.
>>>
>>> I'm not however sure what it is best that these methods return.
>>
>> What are your concerns against returning the Join instance they're
>> residing on (i.e. overriding the method on the subinterfaces of Join
>> declaring the respective type each) ?
>>
>
> I was wondering whether on() should return void. For example, in
> the following, how do the Join objects relate?
>
> // SELECT DISTINCT c
> // FROM Customer c JOIN c.orders o
> // ON c.address.city = o.shippingAddress.city
> // JOIN o.product p
> // ON o.quantity < p.inStock
>
>
> CriteriaQuery<Customer> q = cb.createQuery(Customer.class);
> Root<Customer> customer = q.from(Customer.class);
> Join<Customer,Order> order = customer.join(Customer_.orders);
> Join<Customer,Order> order2 =
>
> order.on(cb.equal(customer.get(Customer_.address).get(Address_.city),
>
> order.get(Order_.shippingAddress).get(Address_.city)));
> Join<Order, Product> product = order.join(Order_.product); // or
> order2 ?
> product.on(cb.lt(order.get(Order_.quantity),
> product.get(Product_.inStock)));
> q.select(customer).distinct(true);
>
>
>
>>> Finally, we should also discuss whether we should support the use of
>>> ON with inner joins. SQL supports this, with the semantics that it is
>>> equivalent to the use of WHERE.
>>
>> While I personally don't feel the desire to provide a second syntax
>> of identical meaning, I fear, the way the criteria API has been
>> designed practically forces us into this. And, as SQL does the same,
>> it probably meets the expectations of the users...
>>
>
> Agreed. I think it is conceptually the simplest.
>
> best regards,
>
> -Linda
>
>
>> Best regards
>> Rainer
>>
>> ---
>> Rainer Schweigkoffer SAP AG Walldorf
>> Business Solution & Technology TD Core JS&I
>> Technology Development Dietmar-Hopp-Allee 16
>> Java Server Core D-69190 Walldorf
>> JEE Implementation Group phone: +49 6227 7 45305
>> Building 3, I.3.14 fax: +49 6227 7 821177
>> rainer.schweigkoffer_at_sap.com
>>
>> Sitz der Gesellschaft/Registered Office: Walldorf, Germany
>> Vorstand/SAP Executive Board: Werner Brandt, Angelika Dammann,
>> Bill McDermott (Co-CEO), Gerhard Oswald, Vishal Sikka,
>> Jim Hagemann Snabe (Co-CEO)
>> Vorsitzender des Aufsichtsrats/Chairperson of the SAP Supervisory
>> Board: Hasso Plattner
>> Registergericht/Commercial Register Mannheim No HRB 350269
>>
>> Diese E-Mail kann Betriebs- oder Geschaeftsgeheimnisse oder sonstige
>> vertrauliche Informationen enthalten. Sollten Sie diese E-Mail
>> irrtuemlich erhalten haben, ist Ihnen eine Verwertung des Inhalts,
>> eine Vervielfaeltigung oder Weitergabe der E-Mail ausdruecklich
>> untersagt. Bitte benachrichtigen Sie uns und vernichten Sie die
>> empfangene E-Mail. Vielen Dank.
>>
>> This e-mail may contain trade secrets or privileged, undisclosed, or
>> otherwise confidential information. If you have received this e-mail
>> in error, you are hereby notified that any review, copying, or
>> distribution of it is strictly prohibited. Please inform us
>> immediately and destroy the original transmittal. Thank you for your
>> cooperation.
>>
>>