Hello everybody,

I have two cmp-ejbs A and B, that have a one-to-many CMR-relation.

Starting from an instance of A i want to pre-load the related B-objects.

I try to optimize this by adding <left-join> tags to jbosscmp-jdbc.xml.

I am using Oracle 9i and jboss-4.0.4.GA.

The left-join query is submitted on the JBOSS console but after that all data is loaded as if I had not defined an eager-load-group-tag with left-join for my finder.

I paste a shortened view of my EntityBeans:

/********************************************************************

 * Offer Proposal Entity Bean.

 *

 * <p>This entity bean represents an offer proposal object in the database.</p>

 *

 * @author cattitma

 *

 * @ejb.bean

 *   name             = "OfferProposalEntityBean"

 *   display-name     = "OfferProposalEntityBean"

 *   generate         = "true"

 *   local-jndi-name  = "local/OfferProposalEntityBean"

 *   view-type        = "local"

 *   type             = "CMP"

 *   transaction-type = "Container"

 *   reentrant        = "false"

 *   cmp-version      = "2.x"

 *   schema           = "OfferProposalEntityBean"

 *   primkey-field    = "iD"

 * @ejb.interface

 *   local-pattern        = "OfferProposalEntityBeanLocal"

 * @ejb.home

 *   local-pattern    = "OfferProposalEntityBeanLocalHome"

* @ejb.finder

 *       signature = "de.mobilcom.offer.repository.proposal.OfferProposalEntityBeanLocal findOfferProposalByContractIDAndOfferType(java.lang.String domainShortcut, int contractNo, java.lang.Integer offerType)"

 *   query         = "SELECT OBJECT(a) FROM OfferProposalEntityBean AS a WHERE a.domain = ?1 AND a.contractNo = ?2 AND a.offerTypeEntity.iD = ?3"

 * @jboss.query

 *       signature = "de.mobilcom.offer.repository.proposal.OfferProposalEntityBeanLocal findOfferProposalByContractIDAndOfferType(java.lang.String domainShortcut, int contractNo, java.lang.Integer offerType)"

* @ejb.util

 *   generate             = "false"

 *

 * @jboss.persistence

 *   datasource         = "java:/OfferInformation"

 *   datasource-mapping = "Oracle9i"

 *   table-name         = "OFFER_PROPOSAL"

 * @jboss.clustered

 *   cluster = "false"

 * @jboss.read-only

 *   read-only = "true"

 *

 */

public abstract class OfferProposalEntityBean implements EntityBean {

        //~ Static fields/initializers ---------------------------------------------------------------------------------------------

        /** Serial version UID. */

        private static final long serialVersionUID = 1L;

        /***************************************

         * Returns offer proposal id.

         *

         * @return Returns offer proposal id.

         *

         * @ejb.persistence

         * @ejb.transaction

         *   type = "Required"

         * @ejb.interface-method

         *   view-type = "local"

         *

         * @jboss.column-name

         *   name = "ID"

         */

        public abstract Integer getID();


        /***************************************

         * Sets offer proposal id

         *

         * @param rID the id of the offer proposal object

         *

         * @ejb.pk-field

         * @ejb.persistence

         * @ejb.transaction

         *   type = "Required"

         */

        public abstract void setID(Integer rID);       

       

        /***************************************

         * Gets the offer type object of an offer proposal object.

         *

         * @return the offer type object of an offer proposal object

         *

         * @ejb.transaction

         *   type = "Required"

         * @ejb.interface-method

         *   view-type = "local"

         * @ejb.relation

         *   name      = "OfferProposalOfferTypeRelation"

         *   role-name = "OfferProposal-has-OfferType"

         *   target-ejb = "OfferTypeEntityBean"

         *       target-role-name = "OfferType-belongs-to-OfferProposal"

         *   target-multiple  = "no"

         * @jboss.relation

         *   fk-column        = "OFFER_TYPE_ID"

         *   related-pk-field = "iD" 

         *  

         */

        public abstract OfferTypeEntityBeanLocal getOfferTypeEntity();

       

        /***************************************

         * Sets the offer type object of an offer proposal object.

         *

         * @param rOfferTypeEntity the offer type object of an offer proposal object

         *

         * @ejb.persistence

         * @ejb.transaction

         *   type = "Required"

         */

        public abstract void setOfferTypeEntity(OfferTypeEntityBeanLocal rOfferTypeEntity);            

}

and I defined a load group for the finder within tag for entity bean:

                <query>

            <query-method>

               <method-name>findOfferProposalByContractIDAndOfferType</method-name>

               <method-params>

                  <method-param>java.lang.String</method-param>

                  <method-param>int</method-param>

                  <method-param>java.lang.Integer</method-param>

               </method-params>

            </query-method>

            <jboss-ql><![CDATA[SELECT OBJECT(a) FROM OfferProposalEntityBean AS a WHERE a.domain = ?1 AND a.contractNo = ?2 AND a.offerTypeEntity.iD = ?                        3]]></jboss-ql>

            <read-ahead>

                <strategy>on-find</strategy>

                <eager-load-group>*</eager-load-group>

                <left-join cmr-field="offerTypeEntity" eager-load-group="*"/>

           </read-ahead>

         </query>

OfferTypeEntity itself is:

/********************************************************************

 * Offer Type Entity Bean.

 *

 * <p>This entity bean represents an offer type object in the database.</p>

 *

 * @author cattitma

 *

 * @ejb.bean

 *   name             = "OfferTypeEntityBean"

 *   display-name     = "OfferTypeEntityBean"

 *   generate         = "true"

 *   local-jndi-name  = "local/OfferTypeEntityBean"

 *   view-type        = "local"

 *   type             = "CMP"

 *   transaction-type = "Container"

 *   reentrant        = "false"

 *   cmp-version      = "2.x"

 *   schema           = "OfferTypeEntityBean"

 *   primkey-field    = "iD"

 * @ejb.interface

 *   local-pattern        = "OfferTypeEntityBeanLocal"

 * @ejb.home

 *   local-pattern    = "OfferTypeEntityBeanLocalHome"

* @ejb.finder

 *   signature = "java.lang.Integer findIDByShortcut(java.lang.String shortcut)"

 *   query     = "SELECT OBJECT(a) FROM OfferTypeEntityBean AS a WHERE a.shortcut = ?1" 

 * @ejb.util

 *   generate             = "false"

 * @jboss.persistence

 *   datasource         = "java:/OfferInformation"

 *   datasource-mapping = "Oracle9i"

 *   table-name         = "OFFER_TYPE"

 * @jboss.clustered

 *   cluster = "false"

 * @jboss.read-only

 *   read-only = "true"

 */

public abstract class OfferTypeEntityBean implements EntityBean {

        //~ Static fields/initializers ---------------------------------------------------------------------------------------------

        /** Serial version UID. */

        private static final long serialVersionUID = 1L;

        /***************************************

         * Returns offer type id.

         *

         * @return Returns offer type id.

         *

         * @ejb.persistence

         * @ejb.transaction

         *   type = "Required"

         * @ejb.interface-method

         *   view-type = "local"

         *

         * @jboss.column-name

         *   name = "ID"

         */

        public abstract Integer getID();


        /***************************************

         * Sets offer type id

         *

         * @param rID the id of the offer type object

         *

         * @ejb.pk-field

         * @ejb.persistence

         * @ejb.transaction

         *   type = "Required"

         */

        public abstract void setID(Integer rID);

       

        /***************************************

         * Sets the shortcut for the offer type id.

         * @param offerTypeShortcut shortcut for the offer type id

         *

         * @ejb.persistence

         * @ejb.transaction

         *   type = "Required"

         */

        public abstract void setShortcut(String offerTypeShortcut);

        /***************************************

         * Gets the shortcut for the offer type id.

         * @return shortcut of the offer type id

         *

         * @ejb.persistence

         * @ejb.transaction

         *   type = "Required"

         * @ejb.interface-method

         *   view-type = "local"

         *

         * @jboss.column-name

         *   name = "SHORTCUT"

         */

        public abstract String getShortcut();

       

}

In the ServiceBean I resolve the shortcut to an ID by using findIDByShortcut.

Then I put the ID to the finder of the OfferProposalEntityBean.

OfferProposalEntityBean in the database table OFFER_PROPOSAL has the fields

ID

OFFER_TYPE_ID

and OfferTypeEntityBean has the database fields:

OFFER_TYPE

ID

SHORTCUT

Can anybody help please?

Greetz, Tamara