If I understand everything correctly,  I see two problems.

First, the name field is not necessary, and second the many key, is the id of the 
source object associated in the many table.  Your statement should look more like the 
following.  I'm fairly new, so any of you more experienced fellows can correct me if 
necessary.


<sql name="pub_id" many-table="pub_ctg" many-key="ctg_id" />


I would need to see you mapping file for pubs to see why they didn't load.

Vincent

-----Original Message-----
From: Alexey N. Shananin [mailto:[EMAIL PROTECTED]
Sent: Monday, March 03, 2003 10:58 AM
To: [EMAIL PROTECTED]
Subject: [castor-dev] many-to-many relation problem


Hi!
I've got a problem fetching collections through many-to-many relation. 
The tables:

ctg(ctg_id - PK)
pub(pub_id - PK)
pub_ctg(ctg_id,pub_id - FK)

mapping.xml: 
------------------>8----------------------
        <class name="ru.park.ispark.dao.Ctg" identity="ctg_id" access="read-only">

                <map-to table="ctg"/>

                <field name="ctg_id" type="long">
                        <sql name="ctg_id" read-only="true" />
                </field>
[...]
                <field name="pubs" collection="vector" type="ru.park.ispark.dao.Pub">
                        <sql name="ctg_id" many-table="pub_ctg" many-key="pub_id" />
                </field>

        </class>
------------------>8----------------------

Using this mapping the exception occured: 

java.sql.SQLException: [GRIZZLY\GRIZZLY]Invalid column name 'pub_id'.
        at com.inet.tds.a.a(Unknown Source)
        at com.inet.tds.c.byte(Unknown Source)
        at com.inet.tds.c.new(Unknown Source)
        at com.inet.tds.c.executeQuery(Unknown Source)
        at org.exolab.castor.jdo.engine.SQLEngine.load(SQLEngine.java:1027)
        at org.exolab.castor.persist.ClassMolder.load(ClassMolder.java:694)
        at org.exolab.castor.persist.LockEngine.load(LockEngine.java:359)
        at 
org.exolab.castor.persist.TransactionContext.load(TransactionContext.java:649)
        at 
org.exolab.castor.persist.TransactionContext.load(TransactionContext.java:555)
        at org.exolab.castor.persist.ClassMolder.load(ClassMolder.java:761)
        at org.exolab.castor.persist.LockEngine.load(LockEngine.java:359)
        at 
org.exolab.castor.persist.TransactionContext.load(TransactionContext.java:649)
        at 
org.exolab.castor.persist.TransactionContext.load(TransactionContext.java:555)
        at org.exolab.castor.persist.ClassMolder.load(ClassMolder.java:787)
        at org.exolab.castor.persist.LockEngine.load(LockEngine.java:359)
        at 
org.exolab.castor.persist.TransactionContext.load(TransactionContext.java:649)
        at 
org.exolab.castor.persist.TransactionContext.load(TransactionContext.java:555)
        at org.exolab.castor.jdo.engine.DatabaseImpl.load(DatabaseImpl.java:302)
        at org.exolab.castor.jdo.engine.DatabaseImpl.load(DatabaseImpl.java:315)
        at 
ru.park.ispark.taglib.RubricTreeTag.outputPublications(RubricTreeTag.java:113)
        at ru.park.ispark.taglib.RubricTreeTag.doStartTag(RubricTreeTag.java:71)
        at org.apache.jsp.rubric_jsp._jspx_meth_is_rubric$1tree_2(rubric_jsp.java:116)
        at org.apache.jsp.rubric_jsp._jspService(rubric_jsp.java:64)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:204)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
        at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
        at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
        at 
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
        at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:432)
        at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:386)
        at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:534)
        at 
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:530)
        at java.lang.Thread.run(Thread.java:536)


What's the problem with this code? 
Swapping "pub_id" and "ctg_id" in "sql" element causes Ctg object to load fine, 
but no related Pubs collection loaded (addPubs, setPubs never called) though they are 
existing.

Thanx for any help,
        Alexey

-- 
Best regards,

Alexey N. Shananin (mailto:[EMAIL PROTECTED])
Java Developer, PARK.RU (http://www.park.ru)


Reply via email to