0 Replies Latest reply on Jul 28, 2005 1:16 AM by ivanyim1

    EJBQL generate wrong SQL

    ivanyim1

      Hi.
      I use Lomboz eclipse 3.1 (Build-20050722) to develop my EJB application.
      I have made a cmp in eclipse and can deploy to jboss (version 4.0.2) successfully. However, there is an exception when I can call the "findAll()" function in CMP thru' a JSP program.

      11:20:09,734 ERROR [User#findAll] Find failed
      java.sql.SQLException: Table 'irs.xuser' doesn't exist
      at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2921)
      at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1570)
      at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
      at com.mysql.jdbc.Connection.execSQL(Connection.java:2978)

      I haven't defined any sql setting like 'irs.xuser' and I don't know where it comes from. Seems it is generated by xdoclet or EJBQL. Do I mis-set some eclipse or jboss setting ? Is it a bugs of JBOSS4 or what else ? Please help.
      Note :
      "irs" is the mySQL database name of my application and 'user' is the valid table name of my bean

      Below please find my program setting

      [UserBean]
      .....
      import ....
      /**
      * @ejb.bean name="User"
      * display-name="Name for User"
      * description="Description for User"
      * jndi-name="ejb/User"
      * type="CMP"
      * cmp-version="2.x"
      * view-type="both"
      *
      * @ejb.persistence table-name = "user"
      *
      * @ejb.transaction type= "Required"
      *
      * @ejb.finder
      * signature="java.util.Collection findAll()"
      * query="SELECT OBJECT(u) FROM User AS u"
      *
      */
      public abstract class UserBean implements EntityBean {

      private EntityContext _context;

      public UserBean() {
      super();
      // TODO Auto-generated constructor stub
      }
      ........


      [ejb-jar]
      .....
      <!-- Entity Beans -->

      <![CDATA[Description for User]]>
      <display-name>Name for User</display-name>

      <ejb-name>User</ejb-name>

      tutorial.interfaces.UserHome
      tutorial.interfaces.User
      <local-home>tutorial.interfaces.UserLocalHome</local-home>
      tutorial.interfaces.UserLocal

      <ejb-class>tutorial.ejb.UserCMP</ejb-class>
      <persistence-type>Container</persistence-type>
      <prim-key-class>tutorial.interfaces.UserPK</prim-key-class>
      False
      <cmp-version>2.x</cmp-version>
      <abstract-schema-name>User</abstract-schema-name>
      <cmp-field >
      <![CDATA[Getter for CMP Field userid]]>
      <field-name>userid</field-name>
      </cmp-field>
      <cmp-field >
      <![CDATA[Getter for CMP Field password]]>
      <field-name>password</field-name>
      </cmp-field>
      <cmp-field >
      <![CDATA[Getter for CMP Field group]]>
      <field-name>group</field-name>
      </cmp-field>


      <query-method>
      <method-name>findAll</method-name>
      <method-params>
      </method-params>
      </query-method>
      <ejb-ql><![CDATA[SELECT OBJECT(c) FROM User AS c]]></ejb-ql>

      <!-- Write a file named ejb-finders-UserBean.xml if you want to define extra finders. -->

      .......

      [jbosscmp-jdbc.xml]
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE jbosscmp-jdbc PUBLIC "-//JBoss//DTD JBOSSCMP-JDBC 3.0//EN" "http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_3_0.dtd">

      <jbosscmp-jdbc>

      java:/MySqlDS
      <datasource-mapping>mySQL</datasource-mapping>
      <create-table>false</create-table>

      <enterprise-beans>

      <ejb-name>User</ejb-name>
      <cmp-field>
      <field-name>userid</field-name>
      <column-name>userid</column-name>
      </cmp-field>
      <cmp-field>
      <field-name>password</field-name>
      <column-name>password</column-name>
      </cmp-field>
      <cmp-field>
      <field-name>group</field-name>
      <column-name>group</column-name>
      </cmp-field>

      </enterprise-beans>
      </jbosscmp-jdbc>

      [mysql-ds.xml]

      <local-tx-datasource>
      <jndi-name>MySqlDS</jndi-name>
      <connection-url>jdbc:mysql://localhost:3306/irs</connection-url>
      <driver-class>com.mysql.jdbc.Driver</driver-class>
      <user-name>root</user-name>
      1234567
      <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>

      <type-mapping>mySQL</type-mapping>

      </local-tx-datasource>


      Thanks
      Ivan