• Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Path expression that evaluates to a collection

 
Yevgen Bushuyev
Greenhorn
Posts: 9
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi,
Persistence spec 4.4.5 says that
"It is syntactically illegal to compose a path expression from a path expression that evaluates to a collection.
For example, if o designates Order, the path expression o.lineItems.product is illegal
since navigation to lineItems results in a collection. This case should produce an error when the
query string is verified."

but following query executes without exceptions on sun app server:




and spec's article on the 'group by' doesn't mention any peculiarities for path expressions used in group by clause...

So, where is the bug, in spec, in sun's implementation or i'm missing something?

wbr, eugen.
 
Yevgen Bushuyev
Greenhorn
Posts: 9
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
and



works fine...
 
Mikalai Zaikin
Ranch Hand
Posts: 3371
12
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Probably it's vendor (Sun) specific feature.

I would trust EJB specification.
 
Yevgen Bushuyev
Greenhorn
Posts: 9
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The specs says "This case shouldproduce an error when the
query string is verified", so that could not be a feature of a provider, only direct violation of a spec... But i'm using a sun's server bundled with ee5, which is what is called 'reference implementation' i think...
 
Mikalai Zaikin
Ranch Hand
Posts: 3371
12
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Howdy !

What is the query result ?

All products from every line item from every order ?

thanks,
MZ
 
Yevgen Bushuyev
Greenhorn
Posts: 9
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
having

then


returns 9, 9.

Tried to change it to

and got

Internal Exception: java.sql.SQLException: ORA-00979: not a GROUP BY expression
Error Code: 979
Call:SELECT t0.ID, COUNT(*) FROM LINEITEM t4, PRODUCT t3, ORDERR t2, LINEITEM t1
, PRODUCT t0 WHERE ((((t1.ORDER_ID = t2.ID) AND (t0.ID (+) = t1.PRODUCT_ID)) AND
(t4.ORDER_ID = t2.ID)) AND (t3.ID = t4.PRODUCT_ID)) GROUP BY t3.ID
Query:ReportQuery(test.entities.example.Order)
at oracle.toplink.essentials.exceptions.DatabaseException.sqlException(D
atabaseException.java:303)
at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.ba
sicExecuteCall(DatabaseAccessor.java:551)
at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.ex

.

But


still works ok

wbr, eugen.
[ December 22, 2006: Message edited by: Yevgen Bushuyev ]
 
Yevgen Bushuyev
Greenhorn
Posts: 9
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
the thing with group by should be like this:



which is actually works.

wbr, eugen.
 
Mikalai Zaikin
Ranch Hand
Posts: 3371
12
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
When I asked about query result, I meant:



Just curious, is it runnig Ok too ? For me it's obvious invalid.

Regarding 'GROUP BY' - I am not sure it's on the test - not mentioned in objectives. (I may be wrong).

Thanks,
MZ
 
Yevgen Bushuyev
Greenhorn
Posts: 9
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
yes, it runs ok and returns the same product as passed to the parameter.

wbr, eugen.
 
Mikalai Zaikin
Ranch Hand
Posts: 3371
12
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi !

Just a hint ...

Try to pass in not a product object reference, rather than some primitive, or simple string.

It must throw an exception at runtime, and in the stack trace you will be able to examine the actual SQL it uses for this Query.

Thanks,
MZ
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic