Hi Armin,

Just to make it absolutely clear so we talk about the same thing;

When I execute a reportquery, I expect to get records back, and if I get
duplicate records back because of the joins I created, well that is
fine. But when I execute a 'normal' query, and OJB returns instantiated
objects, I would like to get a list without duplicated records. 

If this just is not possible, so be it.

It is always nice to have something configurable :) ... But adding a new
method to invoke different behaviour on different databases, I don't
know if that's what we all want... I am not eager to write database
dependent code... So if it is not unavoidable to prevent duplicate
records... I can live with that..

Roger Janssen

-----Original Message-----
From: Armin Waibel [mailto:[EMAIL PROTECTED] 
Sent: Friday, February 29, 2008 4:56 PM
To: OJB Users List
Subject: Re: BUGREPORT : OJB 1.0.5rc1 : UserAliases in OrderBy clauses
are not replaced by the generated aliases for the joins resulting in
illegal SQL statements

Hi Roger,

Janssen, Roger wrote:
> Hi Armin,
> 
> Tested what you described and the ordering seems to work in our setup 
> as well.
> 
> What does not work however is that I get duplicate items returned. For

> every match in the right-handside of the 1:N relation, I get the same 
> object returned. Even if I execute a distinct query.
>

This behavior is intended by OJB. OJB adds all "unknown fields/columns" 
to the query statement. See SqlQueryStatement#ensureColumnsOrderBy.

If you change this method in the same way like #ensureColumnsGroupBy
works, the fields won't be added and you won't get duplicate items.

This works with e.g. mysql but doesn't work for e.g. maxDB, oracle -
they always expect an output column in the order-by clause.
So, I don't know how to solve this issue? Should we make this
configurable e.g. Query.addMissingOrderByColumns(boolean enable)?


> Also the setPathOuterJoin functionality does not work. Inner joins 
> keep being generated. After this latest info from you I tried the same

> with the setPathOuterJoin :
> 
>       query.setPathOuterJoin("myAlias");
> 
> And
> 
>       query.setPathOuterJoin("myAlias.collectionAttr");
> 
> But no luck.

ok I will try to setup some tests too.

regards,
Armin

> 
> Greetings,
> 
> Roger Janssen
> iBanx
> 
> -----Original Message-----
> From: Armin Waibel [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, February 27, 2008 2:51 PM
> To: OJB Users List
> Subject: Re: BUGREPORT : OJB 1.0.5rc1 : UserAliases in OrderBy clauses

> are not replaced by the generated aliases for the joins resulting in 
> illegal SQL statements
> 
> Hi Roger,
> 
> I start work on OJB-137 (your issue) and noticed while "playing" with 
> order-by tests that the following notations seems to work (class Book 
> has a 1:n relation to class Review):
> 
> Criteria c1 = new Criteria()
>          .addEqualTo("reviews.summary", "3_review" + name); 
> c1.setAlias("alias_1"); Criteria c2 = new Criteria()
>          .addEqualTo("reviews.summary", "4_review" + name); 
> c2.setAlias("alias_2"); c1.addAndCriteria(c2); ReportQueryByCriteria q

> = QueryFactory.newReportQuery(Sample.Book.class,
> c1, true);
> q.setAttributes(new String[]{"id", "title","reviews.id"}); 
> q.addOrderByDescending("alias_2.reviews.id");
> 
> If I prefix the path expression with the user alias it seems to work 
> ("alias_2.reviews.id" instead of "alias_2.id"). Did you tried this
too?
> 
> regards,
> Armin
> 
> 
> Armin Waibel wrote:
>> Hi Roger,
>>
>> I create two new "user-alias" related bug reports:
>>
>> http://issues.apache.org/jira/browse/OJB-137
>>
>> https://issues.apache.org/jira/browse/OJB-139
>>
>> OJB-137 reflects your issue. Locally I fixed OJB-139 (easier to fix 
>> then
>> 137) and start work on OJB-137 (seems more complex to fix).
>>
>> regards,
>> Armin
>>
>> Armin Waibel wrote:
>>> Hi Roger,
>>>
>>> now I get your point (I'm a bit slow on the uptake ;-)). I start 
>>> writing many new "order by" tests to isolate the problem and to make

>>> sure that changes don't have unrequested side-effects.
>>>
>>>  > itself was not stable enough for us). In fact, I helped 
>>> implementing  > this feature in OJB a long time ago, and I believe 
>>> the documentation  > on  > the OJB site is the documentation I once 
>>> sent to you guys.
>>>
>>> You are right, I found your example in the query documentation. But 
>>> I
> 
>>> can't find a test in the OJB test-suite. I think this is the reason 
>>> why this feature got lost between 1.0.rc6 and now (the 
>>> criteria/query
> 
>>> stuff was reworked/improved since 1.0rc6).
>>>
>>> My new tests show another bug when using a user alias on a 1:n 
>>> relation with table-per-subclass inheritance - but this is another 
>>> story. After finish test writing, I will do my best to find a patch 
>>> for your problem and keep you up-to-date.
>>>
>>> regards,
>>> Armin
>>>
>>> Janssen, Roger wrote:
>>>> Hi,
>>>>
>>>> The management summary answer to your question "is it important to 
>>>> support alias-names in order by and having clause" is : Yes, it is 
>>>> really really really important!!!
>>>>
>>>> So now for some background information explaining our situation.
>>>>
>>>> We implemented a concept to support non-modelled (abstract)
> attributes.
>>>> We need to support many different complex forms and datasets for 
>>>> our
> 
>>>> customers. The deviation between customers is huge, so modifying 
>>>> our
> 
>>>> domain model (and thus our pojos and thus out database tables) for 
>>>> every customer implementation is not an option. We need to have a 
>>>> stable core domain model.
>>>>
>>>> So all our objects in our domain model have a collection property 
>>>> that is capable of holding a collection of abstract-attribute 
>>>> instances, it's a standard 1:N relation which OJB supports. 
>>>> Abstract
> 
>>>> attribute classes are classes implementing name-value tuples, the 
>>>> name of the attribute, and the value of the attribute. So adding 
>>>> new
> 
>>>> attributes to specific objectclass instances implies we just have 
>>>> to
> 
>>>> add abstract attribute instances to the collection and OJB will 
>>>> store them in the apropriate table in the database. We do not have 
>>>> to modify our domain model by adding new java properties to the 
>>>> affected classes and adding new columns to the affected tables.
>>>>
>>>> So querying for values of object properties, represented by 
>>>> abstract
> 
>>>> attributes, we need to create clauses combining the name/value 
>>>> properties of the abstract attribute instances.
>>>>
>>>> So an example query with two selection criteria based on abstract 
>>>> attributes of an object could be:
>>>>
>>>> SELECT * FROM PERMIT AS A0 INNER JOIN PERMIT_ABSTRACT_ATTRIBUTE AS
>>>> A1 INNER JOIN PERMIT_ABSTRACT_ATTRIBUTE AS A2 WHERE A0.ID=A1.ID AND

>>>> A0.ID=A2.ID AND
>>>>       (A1.NAME='<name of attribute 1> AND A1.VALUE='<value of 
>>>> attribute
>>>> 1>') AND
>>>>       (A2.NAME='<name of attribute 2> AND A2.VALUE='<value of 
>>>> attribute
>>>> 2>');
>>>>
>>>> Since we need to work with bounded name/value pairs, we need to 
>>>> bind
> 
>>>> them together using a alias, in this example the aliases are A1 and
> A2.
>>>> So if we want to order the resultset on such an abstract attribute 
>>>> value the query would look like:
>>>>
>>>> SELECT * FROM PERMIT AS A0 INNER JOIN PERMIT_ABSTRACT_ATTRIBUTE AS
>>>> A1 INNER JOIN PERMIT_ABSTRACT_ATTRIBUTE AS A2 WHERE A0.ID=A1.ID AND

>>>> A0.ID=A2.ID AND
>>>>       (A1.NAME='<name of attribute 1> AND A1.VALUE='<value of 
>>>> attribute
>>>> 1>') AND
>>>>       (A2.NAME='<name of attribute 2> AND A2.VALUE='<value of 
>>>> attribute
>>>> 2>')
>>>> ORDER BY A2.VALUE;
>>>>
>>>> We need to use the alias to link the orderby to the proper join, of

>>>> which there are two, to the same join table (the abstract attribute

>>>> table)!
>>>>
>>>> This is rather common functionality, currently supported in all our

>>>> applications, supported by OJB 1.0rc6 that we use (the 1.0 release 
>>>> itself was not stable enough for us). In fact, I helped 
>>>> implementing
> 
>>>> this feature in OJB a long time ago, and I believe the 
>>>> documentation
> 
>>>> on the OJB site is the documentation I once sent to you guys.
>>>>
>>>> The upcoming 1.0.5 release has some features that we have been 
>>>> waiting for, for several years. We have been able to postpone 
>>>> improvements in our applications for this long, but we cannot do 
>>>> this any longer. So we really need these new features 1.0.5 
>>>> implements, but we need the user-alias in the orderby to work as 
>>>> well, otherwise we will loose a lot of functionality and our
> customers will not accept that.
>>>> Some of the required features are the native limit-clause 
>>>> implementations, the reference descriptor implementation without 
>>>> using foreign-keys (I requested this feature for more then a year 
>>>> ago myself), etc., etc..
>>>> I hope you now have an understanding of how we use this feature, 
>>>> and
> 
>>>> that we cannot afford to loose it.
>>>>
>>>> Greetings,
>>>>
>>>> Roger Janssen
>>>> iBanx
>>>> *******************************************************************
>>>> *
>>>> *****
>>>>
>>>> The information contained in this communication is confidential and

>>>> is intended solely for the use of the individual or entity to  whom

>>>> it is addressed.You should not copy, disclose or distribute this 
>>>> communication without the authority of iBanx bv. iBanx bv is 
>>>> neither
> 
>>>> liable for the proper and complete transmission of the information 
>>>> has been maintained nor that the communication is free of viruses, 
>>>> interceptions or interference.
>>>> If you are not the intended recipient of this communication please 
>>>> return the communication to the sender and delete and destroy all 
>>>> copies.
>>>>
>>>>
>>>>
>>>> -------------------------------------------------------------------
>>>> -
>>>> - To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>
>>>>
>>> --------------------------------------------------------------------
>>> - To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to