[jira] Created: (CAY-1112) Fetching from relationships returns TRANSIENT objects.

From: Laurent Marchal (JIRA) ("Laurent)
Date: Mon Sep 29 2008 - 05:51:11 EDT

  • Next message: Laurent Marchal (JIRA): "[jira] Updated: (CAY-1112) Fetching from relationships returns TRANSIENT objects."

    Fetching from relationships returns TRANSIENT objects.
    ------------------------------------------------------

                     Key: CAY-1112
                     URL: https://issues.apache.org/cayenne/browse/CAY-1112
                 Project: Cayenne
              Issue Type: Bug
              Components: Cayenne Core Library
        Affects Versions: 3.0
             Environment: Linux, Ubuntu 8.04, Cayenne 3.0.M4
                Reporter: Laurent Marchal
                Assignee: Andrus Adamchik

    There is a relationship between MasterJob--->MasterJobAux where i checked "To Dep PK" since no ARTIST_AUX rows can exists without corresponding MasterJob.

    When i fetch a MasterJob i have added a prefetch for MasterJobAux :

    query.addPrefetch(MasterJob.RELATED_MASTER_JOB_AUX_PROPERTY);

    Code I use to get/create/delete MasterJobAux

                    protected MasterJobAux createAux(ILookupFieldCodes fieldCode, Short seqNo, String value) {
                            MasterJobAux aux = MasterJob.this.getObjectContext().newObject(MasterJobAux.class);
                            aux.setScheduleId(MasterJob.this.getScheduleId());
                            aux.setJobName(MasterJob.this.getJobName());
                            
                            aux.setJaFieldCode((int) fieldCode.getID());
                            aux.setJaSequenceNumber(seqNo);
                            aux.setJavalue(value);
                            aux.setRelatedMasterJob(MasterJob.this);

                            return aux;
                    }

                    protected List<MasterJobAux> fetchAuxList() throws OpconException {
                            return MasterJob.this.getRelatedMasterJobAux();
                    }

                    protected void deleteAux(MasterJobAux toDelete) throws OpconException {
                            MasterJob.this.removeFromRelatedMasterJobAux(toDelete);
                            MasterJob.this.getObjectContext().deleteObject(toDelete);
                    }

    Cayenne XML :

            <obj-entity name="MasterJob" className="com.sma.core.api.master.MasterJob" dbEntityName="JMASTER" superClassName="com.sma.core.api.DataAccessObject">
                    <obj-attribute name="accessCodeId" type="java.lang.Short" db-attribute-path="ACCESSCDID"/>
                    <obj-attribute name="altenateMachine1Id" type="java.lang.Short" db-attribute-path="ALTMACH1ID"/>
                    <obj-attribute name="altenateMachine2Id" type="java.lang.Short" db-attribute-path="ALTMACH2ID"/>
                    <obj-attribute name="altenateMachine3Id" type="java.lang.Short" db-attribute-path="ALTMACH3ID"/>
                    <obj-attribute name="deptartmentId" type="java.lang.Short" db-attribute-path="DEPTID"/>
                    <obj-attribute name="estimatedRuntime" type="java.lang.Integer" db-attribute-path="ESTRUNTIME"/>
                    <obj-attribute name="jobGroupId" type="java.lang.Short" db-attribute-path="JOBGROUPID"/>
                    <obj-attribute name="jobName" type="java.lang.String" db-attribute-path="JOBNAME"/>
                    <obj-attribute name="jobTypeId" type="java.lang.Short" db-attribute-path="JOBTYPE"/>
                    <obj-attribute name="machineGroupId" type="java.lang.Short" db-attribute-path="MACHGRPID"/>
                    <obj-attribute name="primaryMachineId" type="java.lang.Short" db-attribute-path="PRIMMACHID"/>
                    <obj-attribute name="scheduleId" type="java.lang.Integer" db-attribute-path="SKDID"/>
                    <obj-attribute name="shortName" type="java.lang.String" db-attribute-path="SHORTNAME"/>
            </obj-entity>
            <obj-entity name="MasterJobAux" className="com.sma.core.api.auxs.MasterJobAux" dbEntityName="JMASTER_AUX" superClassName="com.sma.core.api.DataAccessObject">
                    <obj-attribute name="jaFieldCode" type="java.lang.Integer" db-attribute-path="JAFC"/>
                    <obj-attribute name="jaSequenceNumber" type="java.lang.Short" db-attribute-path="JASEQNO"/>
                    <obj-attribute name="javalue" type="java.lang.String" db-attribute-path="JAVALUE"/>
                    <obj-attribute name="jobName" type="java.lang.String" db-attribute-path="JOBNAME"/>
                    <obj-attribute name="scheduleId" type="java.lang.Integer" db-attribute-path="SKDID"/>
            </obj-entity>

            <db-relationship name="toMasterJobAux" source="JMASTER" target="JMASTER_AUX" toDependentPK="true" toMany="true">
                    <db-attribute-pair source="SKDID" target="SKDID"/>
                    <db-attribute-pair source="JOBNAME" target="JOBNAME"/>
            </db-relationship>

            <obj-relationship name="relatedMasterJobAux" source="MasterJob" target="MasterJobAux" db-relationship-path="toMasterJobAux"/>

    To reproduce the problem :
    1) Fetch MasterJobAux using the relationships

            MasterJob.getRelatedMasterJobAux();

    2) delete/create some MasterJobAux

            MasterJob.removeFromRelatedMasterJobAux(toDelete);
            MasterJob.getObjectContext().deleteObject(toDelete);

    3) Rollback

    4) re-Fetch MasterJobAux using the relationships

            MasterJob.getRelatedMasterJobAux();

    I get TRANSIENT objects, you can look a the SQL log attached where there is some others details.

    Thanks.

    -- 
    This message is automatically generated by JIRA.
    -
    You can reply to this email to add a comment to the issue online.
    



    This archive was generated by hypermail 2.0.0 : Mon Sep 29 2008 - 05:51:38 EDT