Hi! Armin
I found if a class implement 2 interface, another class referance a interface
of both. OJB can not prefetch the referance object successfully.
Example:
public class A implement IA1,IA2{
private String OID;
public String getOID(){
return OID;
}
public void setOID(String pNewValue){
OID = pNewValue;
}
:
:
}
public interface IA1{
}
public interface IA2{
}
public class B{
private String AOID;
public String getAOID(){
return AOID;
}
public void setAOID(String pNewValue){
AOID= pNewValue;
}
private A referanceA;
public A getReferanceA(){
return referanceA;
}
public void setReferanceA(A pNewValue){
referanceA= pNewValue;
}
}
if i declare repository_user:
<class-descriptor class="IA1">
<extent-class class-ref="A"/>
</class-descriptor>
<class-descriptor class="IA2">
<extent-class class-ref="A"/>
</class-descriptor>
<class-descriptor isolation-level="optimistic" class="A" table="A">
<field-descriptor name="OID" column="OID" jdbc-type="CHAR" primarykey="true"
autoincrement="true" nullable="false"/>
:
:
</class-descriptor>
<class-descriptor isolation-level="optimistic" class="B" table="B">
<field-descriptor name="OID" column="OID" jdbc-type="CHAR" primarykey="true"
autoincrement="true" nullable="false"/>
<field-descriptor name="AOID" column="AOID" jdbc-type="CHAR" nullable="false"/>
<reference-descriptor name="referanceA" class-ref="IA1">
<foreignkey field-ref="AOID"/>
</reference-descriptor>
</class-descriptor>
I query a B class, but when I call getReferanceA method , it return null.
I found something wrong in associateBatched method of
org.apache.ojb.broker.accesslayer.ReferencePrefetcher.
In line 115 of org.apache.ojb.broker.accesslayer.ReferencePrefetcher, the id is
IA1(OID),but in line 119 the id2 is IA2(OID).
So in line 120 ,the two parameters is not qeual, and don't excute set.
But if I repository_user:
<class-descriptor class="IA2">
<extent-class class-ref="A"/>
</class-descriptor>
<class-descriptor class="IA1">
<extent-class class-ref="A"/>
</class-descriptor>
<class-descriptor isolation-level="optimistic" class="A" table="A">
<field-descriptor name="OID" column="OID" jdbc-type="CHAR" primarykey="true"
autoincrement="true" nullable="false"/>
:
:
</class-descriptor>
<class-descriptor isolation-level="optimistic" class="B" table="B">
<field-descriptor name="OID" column="OID" jdbc-type="CHAR" primarykey="true"
autoincrement="true" nullable="false"/>
<field-descriptor name="AOID" column="AOID" jdbc-type="CHAR" nullable="false"/>
<reference-descriptor name="referanceA" class-ref="IA1">
<foreignkey field-ref="AOID"/>
</reference-descriptor>
</class-descriptor>
I can query B and get A by calling getReferanceA method. Because the id and id2 both
are IA1(OID).
Dose anyone have the same problem?
regards,
Dogie