jsr338-experts@jpa-spec.java.net

[jsr338-experts] Re: outer joins with ON conditions

From: Linda DeMichiel <linda.demichiel_at_oracle.com>
Date: Thu, 17 Mar 2011 14:16:51 -0700

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.
>
>