Re: many2many ejb3.0 java.lang.IllegalArgumentException : There is no column named
[email protected] Mon, 14 Nov 2005 12:24:34 +0100 (CET)
| Newsgroups | gmane.comp.java.ejb.middlegen.user |
|---|---|
| Message-ID | <[email protected]> |
Bit late perhaps, but this has been fixed now. There was a problem with
remarks on columns used in m2m relationships.
.e
> Hi there,
>
> i am going to write my diploma thesis about an application build with
> ejb3.0
>
> I am studying now for about 3 weeks on this topic. I built a simple
> database and tried to generate the 2.1 bean classes using middlegen. I
> had some problems with the version from the cvs (1.2.2), porting back t=
o
> 1.2.1 fixed that.
> But now i am trying to get the same database running with middlegen
> 1.2.2, directly from cvs, and got issues with many2many relations.
> First my db:
>
> +++++++++++++++++++++++++++++++++++++++++++++++++++
> -- a little soup for all
>
> CREATE TABLE Recipe (
> Recipe_Id integer UNIQUE Not NULL,
> Recipe_Author varchar(30),
> Recipe_Name varchar(40),
> Recipe_Price float,
> CONSTRAINT PK_Recipe_Id PRIMARY KEY (Recipe_Id)
> );
>
>
> CREATE TABLE Cook (
> Cook_Id integer UNIQUE Not NULL,
> Cook_Name varchar(30),
> Cook_Prename varchar(30),
> Cook_Address varchar(50),
> Cook_Zip varchar(10),
> Cook_Town varchar(30),
> Cook_Phone varchar(50),
> CONSTRAINT PK_Cook_Id PRIMARY KEY (Cook_Id)
> );
>
> CREATE TABLE Common_Bean (
> Common_Bean_Id integer UNIQUE Not NUll,
> Common_Bean_Color varchar(10),
> Common_Bean_Size integer,
> Common_Bean_Type varchar(30),
> CONSTRAINT PK_Common_Bean_Id PRIMARY KEY (Common_Bean_Id)
> );
>
> CREATE TABLE Bean_Soup (
> Bean_Soup_Id integer UNIQUE Not NULL,
> Bean_Soup_Name varchar(30),
> Bean_Soup_CookingTime varchar(20),
> Bean_Soup_Endurance integer,
> Bean_Soup_Recipe_Id integer,
> CONSTRAINT PK_Bean_Soup_Id PRIMARY KEY (Bean_Soup_Id),
> CONSTRAINT FK_Bean_Soup_Recipe_id FOREIGN KEY (Bean_Soup_Recipe_Id)
> REFERENCES Recipe (Recipe_Id)
> );
>
> CREATE TABLE Bean_2_Soup (
> Bean_Soup_Id integer Not NULL,
> Common_Bean_Id integer Not NULL,
> CONSTRAINT PK_Bean_2_Soup PRIMARY KEY (Bean_Soup_Id,
> Common_Bean_Id),
> CONSTRAINT FK_Bean_2_Soup_List_Of_The_Soups
> FOREIGN KEY (Bean_Soup_Id) REFERENCES Bean_Soup (Bean_Soup_Id),
> CONSTRAINT FK_Bean_2_Soup_List_Of_The_Beans
> FOREIGN KEY (Common_Bean_Id) REFERENCES Common_Bean
> (Common_Bean_Id)
> );
>
> CREATE TABLE Cook_2_Soup (
> Bean_Soup_Id integer Not NULL,
> Cook_Id integer Not NULL,
> CONSTRAINT PK_Cook_2_Soup PRIMARY KEY (Bean_Soup_Id, Cook_Id),
> CONSTRAINT FK_Cook_2_Soup_List_Of_The_Soups
> FOREIGN KEY (Bean_Soup_Id) REFERENCES Bean_Soup (Bean_Soup_Id),
> CONSTRAINT FK_Bean_2_Soup_List_Of_The_Cooks
> FOREIGN KEY (Cook_Id) REFERENCES Cook (Cook_Id)
> );
>
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>
> There are two tables for the many2many realtions. One Soup can have
> several beans, and one soup can have quite a bunch of cooks, if this is
> helpfull for the soup... =3D)
>
> Now the ant script for building the classes:
>
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>
>
> <!DOCTYPE project [
> <!--<!ENTITY database SYSTEM "file:./config/database/hsqldb.xml">
> -->
> <!ENTITY database SYSTEM "file:./config/database/postgresql.xml">
>
> <!ENTITY ejb SYSTEM "file:./config/ejb/jboss.xml">
> ]>
>
> <project name=3D"BeanSoup EJB3.0" default=3D"all" basedir=3D".">
>
> <property file=3D"${user.home}/build.properties"/>
> <property file=3D"${basedir}/build.properties"/>
> <property name=3D"middlegen.home"
> value=3D"${basedir}/.."/>
> <property name=3D"xdoclet.version" value=3D"1.2"/>
>
> <property name=3D"name" value=3D"beansoup.entity"/>
> <property name=3D"unique.name" value=3D"${name}"/>
> <property name=3D"appxml.src.file"
> value=3D"${basedir}/src/application.xml"/>
> <property name=3D"lib.dir" value=3D"${basedir}/lib"/>
> <property name=3D"src.dir" value=3D"${basedir}/src"/>
> <property name=3D"java.src.dir" value=3D"${src.dir}/java"/>
> <property name=3D"web.src.dir" value=3D"${src.dir}/web"/>
>
> <property name=3D"build.dir" value=3D"${basedir}/build"/>
> <property name=3D"build.java.dir" value=3D"${build.dir}/java"/>
> <property name=3D"build.gen-src.dir" value=3D"${build.dir}/gen-src"/=
>
> <property name=3D"build.classes.dir" value=3D"${build.dir}/classes"=
/>
> <property name=3D"persistencelayer.plugin" value=3D"cmp30"/>
>
> &database;
> &ejb;
>
> <property name=3D"datasource.jndi.name"
> value=3D"${name}/datasource"/>
>
> <path id=3D"lib.class.path">
> <pathelement path=3D"${basedir}"/>
> <pathelement path=3D"${database.driver.classpath}"/>
> <fileset dir=3D"${lib.dir}">
> <include name=3D"*.jar"/>
> </fileset>
> <!-- The middlegen jars -->
> <fileset dir=3D"${middlegen.home}">
> <include name=3D"*.jar"/>
> </fileset>
> </path>
>
> <target name=3D"init">
> <available property=3D"xdoclet1.2+"
> classname=3D"xdoclet.modules.ejb.EjbDocletTask"
> classpathref=3D"lib.class.path"/>
> <available property=3D"xdoclet-jars-installed"
> file=3D"lib/xdoclet-${xdoclet.version}.jar"/>
> </target>
>
> <!-- Run Middlegen
> -->
> <!--
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D -->
> <target
> name=3D"middlegen"
> description=3D"Run Middlegen"
> depends=3D"init,fail-if-no-xdoclet-1.2"
> unless=3D"middlegen.skip"
> >
> <mkdir dir=3D"${build.gen-src.dir}"/>
>
> <taskdef
> name=3D"middlegen"
> classname=3D"middlegen.MiddlegenTask"
> classpathref=3D"lib.class.path"
> />
>
> <middlegen
> appname=3D"${name}"
> prefsdir=3D"${src.dir}"
> gui=3D"${gui}"
> databaseurl=3D"${database.url}"
> initialContextFactory=3D"${java.naming.factory.initial}"
> providerURL=3D"${java.naming.provider.url}"
> datasourceJNDIName=3D"${datasource.jndi.name}"
> driver=3D"${database.driver}"
> username=3D"${database.userid}"
> password=3D"${database.password}"
> schema=3D"${database.schema}"
> catalog=3D"${database.catalog}"
> includeViews=3D"false"
> >
>
> <!-- Tables for the Beansoup -->
> <table generate=3D"true" name=3D"recipe"/>
> <table generate=3D"true" name=3D"common_bean"/>
> <table generate=3D"true" name=3D"bean_soup"/>
> <table generate=3D"true" name=3D"cook"/>
> <table generate=3D"true" name=3D"bean_2_soup"/>
> <table generate=3D"true" name=3D"cook_2_soup"/>
>
>
>
> <many2many>
> <tableb generate=3D"true" name=3D"bean_soup"/>
> <jointable name=3D"bean_2_soup" generate=3D"true"/>
> <tablea generate=3D"true" name=3D"common_bean"/>
> </many2many>
>
> <many2many>
> <tablea generate=3D"true" name=3D"bean_soup"/>
> <jointable name=3D"cook_2_soup" generate=3D"true"/>
> <tableb generate=3D"true" name=3D"cook"/>
> </many2many>
>
> <cmp30
> destination=3D"${build.gen-src.dir}"
> package=3D"${name}.ejb"
> mergedir=3D"${basedir}/src/middlegen"
> >
> </cmp30>
> <!--
> <cmp20
> destination=3D"${build.gen-src.dir}"
> package=3D"${name}.ejb"
> interfacepackage=3D"${name}.interfaces"
> jndiprefix=3D"${unique.name}"
> pkclass=3D"false"
> dataobject=3D"false"
> valueobject=3D"true"
> sessionfacade=3D"true"
> viewtype=3D"local"
> mergedir=3D"${basedir}/src/middlegen"
> readonly=3D"false"
> fkcmp=3D"true"
> guid=3D"true"
> >
> -->
> </middlegen>
> </target>
>
>
> <!--
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D -->
> <!-- Build everything
> -->
> <!--
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D -->
> <target name=3D"all" description=3D"Build everything"
> depends=3D"clean,middlegen" />
>
> <!--
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D -->
> <!-- Clean everything
> -->
> <!--
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D -->
> <target name=3D"clean" description=3D"Clean all generated stuff=
">
> <delete dir=3D"${build.dir}" />
> </target>
>
> <target name=3D"ejb-jar" description=3D"just to prevent error
> message ;-)" />
>
> </project>
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>
> I left some target in order to retain the clarity.
> ant tells me about an error:
>
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=
+++
> [middlegen] 2005-09-22 15:25:32,919 ERROR [middlegen.FileProducer]
> Invocation of method 'getColumn' in class
> middlegen.plugins.entitybean.CMP30Table threw exception class
> java.lang.IllegalArgumentException : There is no column named
> common_bean_id in the table named bean_soup
> [middlegen] org.apache.velocity.exception.MethodInvocationException:
> Invocation of method 'getColumn' in class
> middlegen.plugins.entitybean.CMP30Table threw exception class
> java.lang.IllegalArgumentException : There is no column named
> common_bean_id in the table named bean_soup
> [middlegen] at
> org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.jav=
a:291)
> [middlegen] at
> org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReferen=
ce.java:218)
> [middlegen] at
> org.apache.velocity.runtime.parser.node.ASTReference.evaluate(ASTRefere=
nce.java:350)
> [middlegen] at
> org.apache.velocity.runtime.parser.node.ASTExpression.evaluate(ASTExpre=
ssion.java:84)
> [middlegen] at
> org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStat=
ement.java:107)
> [middlegen] at
> org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:9=
4)
> [middlegen] at
> org.apache.velocity.runtime.directive.Foreach.render(Foreach.java:216)
> [middlegen] at
> org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirectiv=
e.java:153)
> [middlegen] at
> org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:9=
4)
> [middlegen] at
> org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStat=
ement.java:109)
> [middlegen] at
> org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:9=
4)
> [middlegen] at
> org.apache.velocity.runtime.directive.Foreach.render(Foreach.java:216)
> [middlegen] at
> org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirectiv=
e.java:153)
> [middlegen] at
> org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.ja=
va:271)
> [middlegen] at
> org.apache.velocity.app.VelocityEngine.evaluate(VelocityEngine.java:358=
)
> [middlegen] at middlegen.FileProducer.generate(FileProducer.java:328)
> [middlegen] at
> middlegen.FileProducer.generateForTable(FileProducer.java:246)
> [middlegen] at middlegen.Plugin.doIt(Plugin.java:587)
> [middlegen] at middlegen.Plugin.generate(Plugin.java:445)
> [middlegen] at middlegen.Middlegen.writeSource(Middlegen.java:355)
> [middlegen] at middlegen.swing.JMiddlegenFrame
> $1.actionPerformed(JMiddlegenFrame.java:75)
> [middlegen] at
> javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849=
)
> [middlegen] at javax.swing.AbstractButton
> $Handler.actionPerformed(AbstractButton.java:2169)
> [middlegen] at
> javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.j=
ava:420)
> [middlegen] at
> javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
> [middlegen] at
> javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonLis=
tener.java:234)
> [middlegen] at java.awt.Component.processMouseEvent(Component.java:5488=
)
> [middlegen] at
> javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
> [middlegen] at java.awt.Component.processEvent(Component.java:5253)
> [middlegen] at java.awt.Container.processEvent(Container.java:1966)
> [middlegen] at java.awt.Component.dispatchEventImpl(Component.java:3955=
)
> [middlegen] at java.awt.Container.dispatchEventImpl(Container.java:2024=
)
> [middlegen] at java.awt.Component.dispatchEvent(Component.java:3803)
> [middlegen] at
> java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
> [middlegen] at
> java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
> [middlegen] at
> java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
> [middlegen] at java.awt.Container.dispatchEventImpl(Container.java:2010=
)
> [middlegen] at java.awt.Window.dispatchEventImpl(Window.java:1774)
> [middlegen] at java.awt.Component.dispatchEvent(Component.java:3803)
> [middlegen] at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
> [middlegen] at
> java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThre=
ad.java:242)
> [middlegen] at
> java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread=
.java:163)
> [middlegen] at
> java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
> [middlegen] at
> java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
> [middlegen] at
> java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
> [middlegen] middlegen.MiddlegenException: Invocation of method
> 'getColumn' in class middlegen.plugins.entitybean.CMP30Table threw
> exception class java.lang.IllegalArgumentException : There is no column
> named common_bean_id in the table named bean_soup
> [middlegen] at middlegen.FileProducer.generate(FileProducer.java:342)
> [middlegen] at
> middlegen.FileProducer.generateForTable(FileProducer.java:246)
> [middlegen] at middlegen.Plugin.doIt(Plugin.java:587)
> [middlegen] at middlegen.Plugin.generate(Plugin.java:445)
> [middlegen] at middlegen.Middlegen.writeSource(Middlegen.java:355)
> [middlegen] at middlegen.swing.JMiddlegenFrame
> $1.actionPerformed(JMiddlegenFrame.java:75)
> [middlegen] at
> javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849=
)
> [middlegen] at javax.swing.AbstractButton
> $Handler.actionPerformed(AbstractButton.java:2169)
> [middlegen] at
> javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.j=
ava:420)
> [middlegen] at
> javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
> [middlegen] at
> javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonLis=
tener.java:234)
> [middlegen] at java.awt.Component.processMouseEvent(Component.java:5488=
)
> [middlegen] at
> javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
> [middlegen] at java.awt.Component.processEvent(Component.java:5253)
> [middlegen] at java.awt.Container.processEvent(Container.java:1966)
> [middlegen] at java.awt.Component.dispatchEventImpl(Component.java:3955=
)
> [middlegen] at java.awt.Container.dispatchEventImpl(Container.java:2024=
)
> [middlegen] at java.awt.Component.dispatchEvent(Component.java:3803)
> [middlegen] at
> java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
> [middlegen] at
> java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
> [middlegen] at
> java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
> [middlegen] at java.awt.Container.dispatchEventImpl(Container.java:2010=
)
> [middlegen] at java.awt.Window.dispatchEventImpl(Window.java:1774)
> [middlegen] at java.awt.Component.dispatchEvent(Component.java:3803)
> [middlegen] at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
> [middlegen] at
> java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThre=
ad.java:242)
> [middlegen] at
> java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread=
.java:163)
> [middlegen] at
> java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
> [middlegen] at
> java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
> [middlegen] at
> java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
>
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=
++++
> when i deactivate the <many2many> Elements, everything works, but the
> many2many mapping in the class files are missing.
> Whats wrong with it?
>
> Thanks for your help
>
> martin
>
>
>
>
> -------------------------------------------------------
> SF.Net email is sponsored by:
> Tame your development challenges with Apache's Geronimo App Server.
> Download
> it for free - -and be entered to win a 42" plasma tv or your very own
> Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php
> _______________________________________________
> middlegen-user mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/middlegen-user
>
-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Downl=
oad
it for free - -and be entered to win a 42" plasma tv or your very own
Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php