[seam-issues] [JBoss JIRA] Commented: (JBSEAM-4744) EntityQuery.resultList throws a exception when the entity has composite key

Alessandro Lazarotti (JIRA) jira-events at lists.jboss.org
Tue Dec 14 20:23:52 EST 2010


    [ https://issues.jboss.org/browse/JBSEAM-4744?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12570213#comment-12570213 ] 

Alessandro Lazarotti commented on JBSEAM-4744:
----------------------------------------------

It's happen because Seam 2.0.x have this code in org.jboss.seam.framework.Query.java:

   protected String getCountEjbql()
   {
      (...)
      return "select count(*) " + ejbql.substring(fromLoc, orderLoc);
   }


It's works for Hibernate, but by spec, the right way is not uses * but a alias, and the wildcard can be not portable for another provider. I think because of this the implementation in Seam 2.2.x has been changed to:

   protected String getCountEjbql()
   {
      (...)
      else if (useWildcardAsCountQuerySubject) {
         subject = "*";
      }
      (...)
	return new StringBuilder(ejbql.length() + 15).append("select count(").append(subject).append(") "
   }

and useWildcardAsCountQuerySubject is setted by org.jboss.seam.persistence.HibernatePersistenceProvider:

   @Override
   public void init()
   {
      super.init();
      featureSet.add(Feature.WILDCARD_AS_COUNT_QUERY_SUBJECT);
   }

... but "init" is never called, and useWildcardAsCountQuerySubject is ever false, causing the issue. To fix, move the code from "init" to constructor:

   public HibernatePersistenceProvider()
   {
	  super.init();	   
      featureSet.add(Feature.WILDCARD_AS_COUNT_QUERY_SUBJECT);
   }


> EntityQuery.resultList throws a exception when the entity has composite key
> ---------------------------------------------------------------------------
>
>                 Key: JBSEAM-4744
>                 URL: https://issues.jboss.org/browse/JBSEAM-4744
>             Project: Seam
>          Issue Type: Bug
>          Components: Framework
>    Affects Versions: 2.2.0.GA, 2.2.1.CR1
>         Environment: Fedora 12, JDK 1.6 sun/oracle, Seam 2.2.1 CR1, MySQL 5
>            Reporter: Alessandro Lazarotti
>              Labels: entity-query, hibernate
>             Fix For: 2.2.1.Final
>
>
> Hibernate has a known trouble running queries using "count" when the entity has composite keys, like: 
>    select count(foobar) from Foobar foobar:
>  - ERROR [JDBCExceptionReporter] Operand should contain 1 column(s)
> Seam EntityQuery has a workaround, using count(*) instead of count(alias)(spec way) if you use entityQuery.resultCount. 
> It's works with Seam 2.0.x but no more in Seam 2.2.x

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the seam-issues mailing list