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.