Sorry.
I've forgot to publish the field-descriptor for the salesPersonId:
this is the right version:
2003-10-28 11:10:45,307 ERROR [STDERR]
org.apache.ojb.broker.OJBRuntimeException: Incorrect field reference
"salesPersonId" in
[EMAIL PROTECTED]
delete=false,cascade retrieve=true,cascade store=true,is lazy=false,class of
Items=interface domain.Price]
at
org.apache.ojb.broker.metadata.ObjectReferenceDescriptor.getForeignKeyFieldD
escriptors(Unknown Source)
I defined the following interfaces and classes:
public interface Price implements Serializable {
public String getId();
public Article getArticle();
public SalesPerson getSalesPerson();
public double getValue();
}
public class CustomerPriceImpl implements Price {
private String id;
private String articleId;
private String salesPersonId;
private double value;
private SalesPerson salesPerson; // 1:1 reference to Customer
....
public Customer getSalesPerson() {
return (Customer) salesPerson;
}
....
}
public interface Article implements Serializable {
public String getId();
public String getArticleNo();
public Collection getPrices();
}
public interface SalesPerson implements Serializable {
public String getId();
public String getName();
public Collection getPrices();
}
public class CustomerImpl implements SalesPerson {
private String id;
private String name;
private Collection prices = new ArrayList(); // 1:n prices
....
}
the mapping look like:
<!-- mapping interface Price -->
<class-descriptor class="domain.Price">
<extent-class class-ref="domain.CustomerPriceImpl"/>
</class-descriptor>
<class-descriptor class="CustomerPriceImpl">
<field-descriptor
name="id"
column="id"
jdbc-type="VARCHAR"
autoincrement="true"
primarykey="true"/>
...
<reference-descriptor
name="salesPerson"
class-ref="domain.CustomerImpl">
<foreignkey field-ref="salesPersonId"/>
</reference-descriptor>
</class-descriptor>
<!-- mapping interface SalesPerson -->
<class-descriptor class="domain.SalesPerson">
<extent-class class-ref="domain.CustomerImpl"/>
<extent-class class-ref="domain.TraderImpl"/>
</class-descriptor>
<class-descriptor class="domain.CustomerImpl">
<field-descriptor
name="id"
column="id"
jdbc-type="VARCHAR"
autoincrement="true"
primarykey="true"/>
<field-descriptor
name="salesPersonId"
column="customer_Id"
jdbc-type="VARCHAR"/>
....
<collection-descriptor
name="prices"
element-class-ref="domain.Price"
proxy="true"
auto-retrieve="true"
auto-update="true">
<inverse-foreignkey field-ref="salesPersonId"/>
</collection-descriptor>
</class-descriptor>
<!-- mapping interface Article -->
<class-descriptor class="domain.Article">
<extent-class class-ref="domain.CompetitiveArticleImpl"/>
</class-descriptor>
-----Urspr�ngliche Nachricht-----
Von: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Gesendet: Dienstag, 28. Oktober 2003 12:05
An: [EMAIL PROTECTED]
Betreff: RE: Incorrect field reference
Hello,
> -----Original Message-----
> From: Reitsam Andreas [mailto:[EMAIL PROTECTED]
> 2003-10-28 11:10:45,307 ERROR [STDERR]
> org.apache.ojb.broker.OJBRuntimeException: Incorrect field reference
> "salesPersonId" in
> [EMAIL PROTECTED]
> delete=false,cascade retrieve=true,cascade store=true,is
> lazy=false,class of
> Items=interface domain.Price]
> at
> org.apache.ojb.broker.metadata.ObjectReferenceDescriptor.getFo
> reignKeyFieldD
> escriptors(Unknown Source)
> public class CustomerPriceImpl implements Price {
...
> private String salesPersonId;
...
> }
> }
> <!-- mapping interface Price -->
> <class-descriptor class="domain.Price">
> <extent-class class-ref="domain.CustomerPriceImpl"/>
> </class-descriptor>
>
> <class-descriptor class="domain.CustomerImpl">
> <collection-descriptor
> name="prices"
> element-class-ref="domain.Price"
^^^^^^^^^^^^^
you might better use domain.CustomerPriceImpl here
> proxy="true"
> auto-retrieve="true"
> auto-update="true">
> <inverse-foreignkey field-ref="salesPersonId"/>
^^^^^^^^^^^^^^^
now OJB expects domain.Price to have a field-descriptor
named salesPersonId.
> </collection-descriptor>
> </class-descriptor>
I think you have two ways to fix it:
1. make the type of the reference domain.CustomerPriceImpl, or
2. add a field-descriptor for salesPersonId to the
class-descriptor of domain.Price (I know it is an interface,
but that's o.k.)
HTH,
Olli
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]