On Feb 15, 2007, at 5:02 PM, Craig L Russell wrote:

Hi Dain,

On Feb 15, 2007, at 4:57 PM, Dain Sundstrom wrote:

This is the only group of JPA developers, I know of so I'm going to ask here...

This was discussed at length in the expert group and the result is in the specification.

That's too bad.  It was a very surprising discovery for me.

One thing I find strange is the namespace of NamedQueries. I declare NamedQueries using either an annotation on my entity or in xml using a named-query element nested in my entity element. This implies to me as a developer that the named queries are "owned" by the entity.

And yet, they are not. The namespace for queries is the entire PersistenceUnit.

But when you go to use a named query you must retrieve it using the EntityManager like this:

    Query query = entityManager.createNamedQuery(name);

Which means that the queries have a single global namespace. To make matters worse there doesn't seem to be any enforcement in the schema to make duplicate queries illegal.

This allows implementations to add value. ;-)

LOL

Is my understanding correct?

Yes. The best we could do is to make a recommendation that users guarantee uniqueness of names by prepending the entity name to the query name. As a side benefit, it's then possible to actually find the query to debug it.

That is how, I'm declaring my queries now :(

Also, OpenJPA seems to be ok with duplicate query names and randomly pick which one to execute. I think we should at least print a warning if a user has duplicate named queries, or maybe fire an exception for duplicate names.

Sounds like added value to me. Care to file a JIRA with your observations and a request for your preferred implementation?

Done. OPENJPA-152

-dain

Reply via email to