Simplest one-many relationship: not working
roger_cmu Apr 26, 2004 3:25 PMI am new to ejb-relationship but , believe me, I tried hard. Here is the code: A customer can have many addresses.
AdderssBean.java
// CMP field accessors
public abstract String getStreet();
public abstract void setStreet(String street);
public abstract Integer getId();
public abstract void setId(Integer id);
CustomerBean.java
// CMP field accessors
public abstract String getLastname();
public abstract void setLastname(String lastname);
public abstract Integer getId();
public abstract void setId(Integer id);
// CMR field accessors
public abstract void setAddress(Collection col);
public abstract Collection getAddress();
ejb-jar.xml
<display-name>CustomerEJB</display-name>
<ejb-name>CustomerEJB</ejb-name>
<local-home>test.ejb.com.sbm.cts.customerHome</local-home>
test.ejb.com.sbm.cts.Customer
<ejb-class>test.ejb.com.sbm.cts.CustomerBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.Integer</prim-key-class>
False
<cmp-version>2.x</cmp-version>
<abstract-schema-name>CustomerSchema</abstract-schema-name>
<cmp-field><field-name>lastname</field-name></cmp-field> <cmp-field><field-name>id</field-name></cmp-field>
<primkey-field>id</primkey-field>
<ejb-local-ref>
<ejb-ref-name>ejb/address</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<local-home>test.ejb.com.sbm.cts.AddressHome</local-home>
test.ejb.com.sbm.cts.Address
<ejb-link>AddressEJB</ejb-link>
</ejb-local-ref>
<resource-ref>
<res-ref-name>jdbc/BankDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<display-name>AddressEJB</display-name>
<ejb-name>AddressEJB</ejb-name>
<local-home>test.ejb.com.sbm.cts.AddressHome</local-home>
test.ejb.com.sbm.cts.Address
<ejb-class>test.ejb.com.sbm.cts.AddressBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.Integer</prim-key-class>
False
<cmp-version>2.x</cmp-version>
<abstract-schema-name>AddressSchema</abstract-schema-name>
<cmp-field><field-name>street</field-name></cmp-field>
<cmp-field><field-name>id</field-name></cmp-field>
<primkey-field>id</primkey-field>
<resource-ref>
<res-ref-name>jdbc/BankDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
jbosscmp-jdbc.xml
<ejb-name>CustomerEJB</ejb-name>
<table-name>customer</table-name>
<create-table>false</create-table>
<remove-table>false</remove-table>
<cmp-field>
<field-name>lastname</field-name>
<column-name>lastname</column-name>
</cmp-field>
<cmp-field>
<field-name>id</field-name>
<column-name>custid</column-name>
</cmp-field>
<ejb-name>AddressEJB</ejb-name>
<table-name>address</table-name>
<create-table>false</create-table>
<remove-table>false</remove-table>
<cmp-field>
<field-name>street</field-name>
<column-name>street</column-name>
</cmp-field>
<cmp-field>
<field-name>id</field-name>
<column-name>addressid</column-name>
</cmp-field>
<ejb-relation>
<ejb-relation-name>Customer-address</ejb-relation-name>
<foreign-key-mapping/>
<ejb-relationship-role>
<ejb-relationship-role-name>Customer-has-an-address</ejb-relationship-role-name>
<key-fields>
<field-name>address</field-name>
<column-name>custid</column-name>
</key-fields>
</ejb-relationship-role>
<ejb-relationship-role>
<ejb-relationship-role-name>an-address-belongs-to-a-customer</ejb-relationship-role-name>
<key-fields/>
</ejb-relationship-role>
</ejb-relation>
tables:
CREATE TABLE customer
(
lastname VARCHAR(10),
custid int(4) auto_increment,
CONSTRAINT pk_customer PRIMARY KEY (custid)
);
CREATE TABLE address
(
street VARCHAR(10),
addressid int(4) auto_increment,
custid int(4),
CONSTRAINT pk_user PRIMARY KEY (addressid)
);
Suggestions are highly appreciated.