I'm getting the following stack overflow on a createEntityManager call:
[EL Info]: 2010-02-03 20:45:30.567--ServerSession(23764234)--EclipseLink, version: Eclipse Persistence Services - 2.0.0.v20091127-r5931
Exception in thread "main" java.lang.StackOverflowError
at org.eclipse.persistence.internal.expressions.BaseExpression. getBuilder(BaseExpression.java:51)
at org.eclipse.persistence.internal.expressions.BaseExpression. getBuilder(BaseExpression.java:51)
at org.eclipse.persistence.internal.expressions.ParameterExpres sion.getBuilder(ParameterExpression.java:138)
at org.eclipse.persistence.internal.expressions.BaseExpression. getBuilder(BaseExpression.java:51)
at org.eclipse.persistence.internal.expressions.BaseExpression. getBuilder(BaseExpression.java:51)
at org.eclipse.persistence.internal.expressions.ParameterExpres sion.getBuilder(ParameterExpression.java:138)
at org.eclipse.persistence.internal.expressions.BaseExpression. getBuilder(BaseExpression.java:51)
at org.eclipse.persistence.internal.expressions.BaseExpression. getBuilder(BaseExpression.java:51)
at org.eclipse.persistence.internal.expressions.ParameterExpres sion.getBuilder(ParameterExpression.java:138)
at org.eclipse.persistence.internal.expressions.BaseExpression. getBuilder(BaseExpression.java:51)
at org.eclipse.persistence.internal.expressions.BaseExpression. getBuilder(BaseExpression.java:51)
at org.eclipse.persistence.internal.expressions.ParameterExpres sion.getBuilder(ParameterExpression.java:138)
at org.eclipse.persistence.internal.expressions.BaseExpression. getBuilder(BaseExpression.java:51)
at org.eclipse.persistence.internal.expressions.BaseExpression. getBuilder(BaseExpression.java:51)
at org.eclipse.persistence.internal.expressions.ParameterExpres sion.getBuilder(ParameterExpression.java:138)
at org.eclipse.persistence.internal.expressions.BaseExpression. getBuilder(BaseExpression.java:51)
at org.eclipse.persistence.internal.expressions.BaseExpression. getBuilder(BaseExpression.java:51)
at org.eclipse.persistence.internal.expressions.ParameterExpres sion.getBuilder(ParameterExpression.java:138)
at org.eclipse.persistence.internal.expressions.BaseExpression. getBuilder(BaseExpression.java:51)
The definition that's causing it is:
<named-query name="findCountryFromAlias">
<query>
<![CDATA[
SELECT co
FROM Country co
WHERE LOWER(:name) = LOWER(co.abbrev)
or LOWER(:name) = LOWER(co.name)
or LOWER(:name) IN (SELECT coa.alias FROM CountryAlias coa WHERE LOWER(:name) = LOWER(coa.name))
]]>
</query>
</named-query>
Please feel free to file a bug detailing the mappings that lead to this, as it appears to be a problem in building the expressionBuilders from the query.
I'm sure if this was intended, but the query itself doesn't appear valid -
"LOWER(:name) IN (SELECT coa.alias FROM CountryAlias coa WHERE LOWER(:name) = LOWER(coa.name))"
does not tie to the Country object in anyway. So if there exists a coa.alias that equals coa.name and equals the parameter passed in, it will cause all Country objects to be returned. ie it is either always true or always false for a query.