1:1 Relationships and cmp fields with Xdoclet
dn666 Jul 16, 2003 7:26 AMI simply dont get it !!!!
How do i create a 1:1 relationship with xdoclet.
whats wrong jboss keeps complaining:
CMP field for key not found: field name=status_idsLocal
the beans are so simple they can get
Im using jboss-3.2.1
The database tables are:
Codec_master
codec_key (pk)
status_id (fk - Status_ids -> status_id)
Status_ids
status_id (pk)
descrip
Here are my two beans, with the xdoclet tags:
The Codec_masterBean:
package dk.stream.ejbrelationtest;
import javax.ejb.EntityBean;
import javax.ejb.EntityContext;
import javax.ejb.CreateException;
import java.sql.Timestamp;
import java.util.Collection;
/**
* @ejb.bean
* name="Codec_master"
* type="CMP"
* view-type="local"
* local-jndi-name="local/Codec_master"
* primkey-field="codec_key"
* schema="Codec_master"
* cmp-version="2.x"
* view-type="local"
* @ejb.value-object
* name="Codec_master"
* match="*"
* @ejb.transaction
* type="Required"
* @ejb.util
* generate="physical"
* @ejb.persistence
* table-name="codec_master"
* @ejb:pk class="java.lang.Long"
*
* @ejb:home generate="local"
* @ejb:finder
* signature= "java.util.Collection findAll()"
* query ="SELECT OBJECT(o) FROM Codec_master AS o"
*
*
* @jboss:create-table false
* @jboss:remove-table false
*/
public abstract class Codec_masterBean implements EntityBean {
private EntityContext context;
/**
* @ejb.create-method
*/
public Long ejbCreate(Long codecKey, Status_idsLocal status_idsLocal) throws CreateException {
setCodec_key(codecKey);
setStatus_idsLocal(status_idsLocal);
return codecKey;
}
public void ejbPostCreate(Long codecKey, Status_idsLocal statusID) {
}
public void ejbActivate() {
}
public void ejbLoad() {
}
public void ejbPassivate() {
}
public void ejbRemove() {
}
public void ejbStore() {
}
public void setEntityContext(EntityContext ctx) {
this.context = ctx;
}
public void unsetEntityContext() {
this.context = null;
}
/** @ejb:pk-field
* @ejb:interface-method view-type="local"
* @ejb:persistent-field
*/
public abstract Long getCodec_key();
/** @ejb:interface-method view-type="local"
* @ejb:persistent-field
*/
public abstract void setCodec_key(Long newCodec_key);
/**
* @return a Status_ids object
* @ejb.interface-method
* @ejb:persistent-field
* @ejb.relation
* name="Codec_master-Status_id"
* role-name="Codec_master-has-a-Status_id"
* target-ejb="Status_ids"
* target-role-name="Status_ids-belongs-to-Codec_master"
* target-multiple="No"
*
* @jboss.relation
* related-pk-field="status_id"
* fk-column="status_idsLocal"
* fk-constraint="true"
*
* @jboss.target-relation
* related-pk-field="status_idsLocal"
* fk-column="status_id"
* fk-constraint="true"
*/
public abstract Status_idsLocal getStatus_idsLocal();
/** @ejb:interface-method view-type="local"
*/
public abstract void setStatus_idsLocal(Status_idsLocal status_idsLocal);
}
---------------------------------------
The Status_idsBean:
package dk.stream.ejbrelationtest;
import javax.ejb.EntityBean;
import javax.ejb.EntityContext;
import javax.ejb.CreateException;
/**
* @ejb.bean
* name="Status_ids"
* type="CMP"
* view-type="local"
* local-jndi-name="local/Status_ids"
* primkey-field="status_id"
* schema="Status_ids"
* cmp-version="2.x"
* view-type="local"
* @ejb.value-object
* name="Status_ids"
* match="*"
* @ejb.transaction
* type="Required"
* @ejb.util
* generate="physical"
* @ejb:pk class="java.lang.String"
*
* @ejb:home generate="local"
* @ejb:finder
* signature= "java.util.Collection findAll()"
* query ="SELECT OBJECT(o) FROM Status_ids AS o"
*
* @jboss:create-table false
* @jboss:remove-table false
*/
public abstract class Status_idsBean implements EntityBean {
private EntityContext context;
/**
* @ejb.create-method
*/
public String ejbCreate(String status_id, String descrip) throws CreateException {
setStatus_id(status_id);
setDescrip(descrip);
return status_id;
}
public void ejbPostCreate(String status_id, String descrip) {
}
public void ejbActivate() {
}
public void ejbLoad() {
}
public void ejbPassivate() {
}
public void ejbRemove() {
}
public void ejbStore() {
}
public void setEntityContext(EntityContext ctx) {
this.context = ctx;
}
public void unsetEntityContext() {
this.context = null;
}
/** @ejb:pk-field
* @ejb:interface-method view-type="local"
* @ejb:persistent-field
*/
public abstract String getStatus_id();
/** @ejb:interface-method view-type="local"
*/
public abstract void setStatus_id(String newStatus_id);
/** @ejb:interface-method view-type="local"
* @ejb:persistent-field
*/
public abstract String getDescrip();
/** @ejb:interface-method view-type="local"
*/
public abstract void setDescrip(String newDescrip);
}
And the generated deployment descriptors:
ejb-jar.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar >
No Description.
<display-name>Generated by XDoclet</display-name>
<enterprise-beans>
<!-- Session Beans -->
<!--
To add session beans that you have deployment descriptor info for, add
a file to your merge directory called session-beans.xml that contains
the markup for those beans.
-->
<!-- Entity Beans -->
<![CDATA[No Description.]]>
<ejb-name>Status_ids</ejb-name>
<local-home>dk.stream.ejbrelationtest.Status_idsLocalHome</local-home>
dk.stream.ejbrelationtest.Status_idsLocal
<ejb-class>dk.stream.ejbrelationtest.Status_idsBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.String</prim-key-class>
False
<cmp-version>2.x</cmp-version>
<abstract-schema-name>Status_ids</abstract-schema-name>
<cmp-field >
<![CDATA[]]>
<field-name>status_id</field-name>
</cmp-field>
<cmp-field >
<![CDATA[]]>
<field-name>descrip</field-name>
</cmp-field>
<primkey-field>status_id</primkey-field>
<query-method>
<method-name>findAll</method-name>
<method-params>
</method-params>
</query-method>
<ejb-ql><![CDATA[SELECT OBJECT(o) FROM Status_ids AS o]]></ejb-ql>
<![CDATA[No Description.]]>
<ejb-name>Codec_master</ejb-name>
<local-home>dk.stream.ejbrelationtest.Codec_masterLocalHome</local-home>
dk.stream.ejbrelationtest.Codec_masterLocal
<ejb-class>dk.stream.ejbrelationtest.Codec_masterBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.Long</prim-key-class>
False
<cmp-version>2.x</cmp-version>
<abstract-schema-name>Codec_master</abstract-schema-name>
<cmp-field >
<![CDATA[]]>
<field-name>codec_key</field-name>
</cmp-field>
<cmp-field >
<![CDATA[]]>
<field-name>status_idsLocal</field-name>
</cmp-field>
<primkey-field>codec_key</primkey-field>
<query-method>
<method-name>findAll</method-name>
<method-params>
</method-params>
</query-method>
<ejb-ql><![CDATA[SELECT OBJECT(o) FROM Codec_master AS o]]></ejb-ql>
<!--
To add entity beans that you have deployment descriptor info for, add
a file to your merge directory called entity-beans.xml that contains
the markup for those beans.
-->
<!-- Message Driven Beans -->
<!--
To add message driven beans that you have deployment descriptor info for, add
a file to your merge directory called message-driven-beans.xml that contains
the <message-driven></message-driven> markup for those beans.
-->
</enterprise-beans>
<!-- Relationships -->
<ejb-relation >
<ejb-relation-name>Codec_master-Status_id</ejb-relation-name>
<!-- unidirectional -->
<ejb-relationship-role >
<ejb-relationship-role-name>Codec_master-has-a-Status_id</ejb-relationship-role-name>
One
<relationship-role-source >
<ejb-name>Codec_master</ejb-name>
</relationship-role-source>
<cmr-field >
<cmr-field-name>status_idsLocal</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
<ejb-relationship-role >
<ejb-relationship-role-name>Status_ids-belongs-to-Codec_master</ejb-relationship-role-name>
One
<relationship-role-source >
<ejb-name>Status_ids</ejb-name>
</relationship-role-source>
</ejb-relationship-role>
</ejb-relation>
<!-- Assembly Descriptor -->
<assembly-descriptor >
<!-- finder permissions -->
<!-- finder permissions -->
<!-- transactions -->
<container-transaction >
<ejb-name>Status_ids</ejb-name>
<method-name>*</method-name>
<trans-attribute>Required</trans-attribute>
</container-transaction>
<container-transaction >
<ejb-name>Codec_master</ejb-name>
<method-name>*</method-name>
<trans-attribute>Required</trans-attribute>
</container-transaction>
<!-- finder transactions -->
</assembly-descriptor>
</ejb-jar>
---------------------------------
And jbosscmp-jdbc.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jbosscmp-jdbc PUBLIC "-//JBoss//DTD JBOSSCMP-JDBC 3.0//EN" "http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_3_0.dtd">
<jbosscmp-jdbc>
java:/SapdbDS
<datasource-mapping>SapDB</datasource-mapping>
<enterprise-beans>
<ejb-name>Status_ids</ejb-name>
<create-table>false</create-table>
<remove-table>false</remove-table>
<cmp-field>
<field-name>descrip</field-name>
<column-name>descrip</column-name>
</cmp-field>
<cmp-field>
<field-name>status_id</field-name>
<column-name>status_id</column-name>
</cmp-field>
<!--
To define load groups for this entity, write a file named
jbosscmp-jdbc-load-Status_idsBean.xml and put it in
your mergedir. Write it according to the following DTD slice:
<!ELEMENT load-groups (load-group+)>
<!ELEMENT load-group (load-group-name, description?, field-name+)>
<!ELEMENT load-group-name (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT field-name (#PCDATA)>
<!ELEMENT eager-load-group (#PCDATA)>
<!ELEMENT lazy-load-groups (load-group-name+)>
-->
<ejb-name>Codec_master</ejb-name>
<create-table>false</create-table>
<remove-table>false</remove-table>
<cmp-field>
<field-name>codec_key</field-name>
<column-name>codec_key</column-name>
</cmp-field>
<cmp-field>
<field-name>status_idsLocal</field-name>
<column-name>status_idsLocal</column-name>
</cmp-field>
<cmp-field>
<field-name>codec_key</field-name>
<column-name>codec_key</column-name>
</cmp-field>
<!--
To define load groups for this entity, write a file named
jbosscmp-jdbc-load-Codec_masterBean.xml and put it in
your mergedir. Write it according to the following DTD slice:
<!ELEMENT load-groups (load-group+)>
<!ELEMENT load-group (load-group-name, description?, field-name+)>
<!ELEMENT load-group-name (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT field-name (#PCDATA)>
<!ELEMENT eager-load-group (#PCDATA)>
<!ELEMENT lazy-load-groups (load-group-name+)>
-->
</enterprise-beans>
<ejb-relation>
<ejb-relation-name>Codec_master-Status_id</ejb-relation-name>
<foreign-key-mapping/>
<ejb-relationship-role>
<ejb-relationship-role-name>Codec_master-has-a-Status_id</ejb-relationship-role-name>
<fk-constraint>true</fk-constraint>
<key-fields>
<key-field>
<field-name>status_idsLocal</field-name>
<column-name>status_id</column-name>
</key-field>
</key-fields>
</ejb-relationship-role>
<ejb-relationship-role>
<ejb-relationship-role-name>Status_ids-belongs-to-Codec_master</ejb-relationship-role-name>
<fk-constraint>true</fk-constraint>
<key-fields>
<key-field>
<field-name>status_id</field-name>
<column-name>status_idsLocal</column-name>
</key-field>
</key-fields>
</ejb-relationship-role>
</ejb-relation>
</jbosscmp-jdbc>