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