Index already exists in statement
sbocquet May 30, 2004 12:37 PMHi,
I use JBoss IDE (XDoclet) to generate my CMP EJBs, and HSQQLDB as database.
I have 2 EJBs, Groups and Roles. A groups can have many roles and a role can have many groups. There is a relation table between them, GroupsRolesLink.
The first time I deploy them, the container creates the tables, the contraints and the indexes correctly.
The second time I deploy them, I have the following error
18:16:54,811 ERROR [EntityContainer] Starting failed org.jboss.deployment.DeploymentException: Error while creating table; - nested throwable: (java.sql.SQLException: Index already exists in statement [CREATE INDEX roleId_idx0 ON GroupsRolesLink (roleId)]) at org.jboss.ejb.plugins.cmp.jdbc.JDBCStartCommand.createIndex(JDBCStartCommand.java:305) at org.jboss.ejb.plugins.cmp.jdbc.JDBCStartCommand.createCMRIndex(JDBCStartCommand.java:527) ...
Here are the descriptors generated by XDoclet.
ejb-jar.xml
<entity > <description><![CDATA[Entity bean that represents a role.]]></description> <display-name>Roles Entity</display-name> <ejb-name>Roles</ejb-name> <home>org.dyndns.bet4fun.interfaces.RolesHome</home> <remote>org.dyndns.bet4fun.interfaces.Roles</remote> <local-home>org.dyndns.bet4fun.interfaces.RolesLocalHome</local-home> <local>org.dyndns.bet4fun.interfaces.RolesLocal</local> <ejb-class>org.dyndns.bet4fun.entity.RolesCMP</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>org.dyndns.bet4fun.interfaces.RolesPK</prim-key-class> <reentrant>False</reentrant> <cmp-version>2.x</cmp-version> <abstract-schema-name>Roles</abstract-schema-name> <cmp-field > <description><![CDATA[Get the Id of the role]]></description> <field-name>roleId</field-name> </cmp-field> <cmp-field > <description><![CDATA[Get the name of the role]]></description> <field-name>name</field-name> </cmp-field> <cmp-field > <description><![CDATA[Get the description of the role]]></description> <field-name>description</field-name> </cmp-field> <query> <query-method> <method-name>findAll</method-name> <method-params> </method-params> </query-method> <ejb-ql><![CDATA[SELECT OBJECT(R) FROM Roles AS R]]></ejb-ql> </query> <!-- Write a file named ejb-finders-RolesBean.xml if you want to define extra finders. --> </entity> <entity > <description><![CDATA[Entity bean that represents a Group.]]></description> <display-name>Groups Entity</display-name> <ejb-name>Groups</ejb-name> <home>org.dyndns.bet4fun.interfaces.GroupsHome</home> <remote>org.dyndns.bet4fun.interfaces.Groups</remote> <local-home>org.dyndns.bet4fun.interfaces.GroupsLocalHome</local-home> <local>org.dyndns.bet4fun.interfaces.GroupsLocal</local> <ejb-class>org.dyndns.bet4fun.entity.GroupsCMP</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>org.dyndns.bet4fun.interfaces.GroupsPK</prim-key-class> <reentrant>False</reentrant> <cmp-version>2.x</cmp-version> <abstract-schema-name>Groups</abstract-schema-name> <cmp-field > <description><![CDATA[Get the Id of the group]]></description> <field-name>groupId</field-name> </cmp-field> <cmp-field > <description><![CDATA[Get the name of the group]]></description> <field-name>name</field-name> </cmp-field> <cmp-field > <description><![CDATA[Get the description of the group]]></description> <field-name>description</field-name> </cmp-field> <query> <query-method> <method-name>findAll</method-name> <method-params> </method-params> </query-method> <ejb-ql><![CDATA[SELECT OBJECT(G) FROM Groups AS G]]></ejb-ql> </query> <!-- Write a file named ejb-finders-GroupsBean.xml if you want to define extra finders. --> </entity> ... </relationships> <ejb-relation > <ejb-relation-name>GroupsRolesRelation</ejb-relation-name> <ejb-relationship-role > <ejb-relationship-role-name>RolesHasGroups</ejb-relationship-role-name> <multiplicity>Many</multiplicity> <relationship-role-source > <ejb-name>Roles</ejb-name> </relationship-role-source> <cmr-field > <cmr-field-name>groups</cmr-field-name> <cmr-field-type>java.util.Collection</cmr-field-type> </cmr-field> </ejb-relationship-role> <ejb-relationship-role > <ejb-relationship-role-name>GroupsHasRoles</ejb-relationship-role-name> <multiplicity>Many</multiplicity> <relationship-role-source > <ejb-name>Groups</ejb-name> </relationship-role-source> <cmr-field > <cmr-field-name>roles</cmr-field-name> <cmr-field-type>java.util.Collection</cmr-field-type> </cmr-field> </ejb-relationship-role> </ejb-relation> </relationships>
and jbosscmp-jdbc.xml
... <relationships> <ejb-relation> <ejb-relation-name>GroupsRolesRelation</ejb-relation-name> <relation-table-mapping> <table-name>GroupsRolesLink</table-name> <create-table>true</create-table> </relation-table-mapping> <ejb-relationship-role> <ejb-relationship-role-name>RolesHasGroups</ejb-relationship-role-name> <fk-constraint>true</fk-constraint> <key-fields> <key-field> <field-name>roleId</field-name> <column-name>roleId</column-name> </key-field> </key-fields> </ejb-relationship-role> <ejb-relationship-role> <ejb-relationship-role-name>GroupsHasRoles</ejb-relationship-role-name> <fk-constraint>true</fk-constraint> <key-fields> <key-field> <field-name>groupId</field-name> <column-name>groupId</column-name> </key-field> </key-fields> </ejb-relationship-role> </ejb-relation> </relationships>
As there is an error on the deployment, my EJB is not deployed !
I don't undestand why this woks the first time and not the second one !
Can someone explains to me how JBoss works on that case, and what is the solution ?
Thanks,