rpa_rio, I'm not sure if you have found an answer for your question, but hopefully I can help. This took me a pretty minute to figure out. I use XDOCLET to generate all the helper classes and setup XML. Of course, your mileage may vary.
The brief setup looks like: I did the following for my setup which is similar: person.java | package infrastructure.ejb; | | import infrastructure.interfaces.PersonData; | | import java.rmi.RemoteException; | | import javax.ejb.EJBException; | import javax.ejb.EntityBean; | import javax.ejb.EntityContext; | import javax.ejb.RemoveException; | | /** | * @ejb.bean name="Person" | * display-name="PersonBean" | * description="Any person who is authorized to gain access." | * jndi-name="infrastructure/ejb/Person" | * local-jndi-name = "infrastructure/ejb/PersonLocal" | * type="CMP" | * cmp-version="2.x" | * view-type="both" | * | * @ejb.persistence table-name = "Person" | * | * @ejb.finder signature = "java.util.Collection findAll()" | * | * @ejb.finder signature = "infrastructure.interfaces.PersonLocal findByEmail(java.lang.String email)" | * query = "SELECT OBJECT(o) FROM Person AS o WHERE o.email= ?1" | * | * @ejb.finder signature = "infrastructure.interfaces.PersonLocal findByUsername(java.lang.String username)" | * query = "SELECT DISTINCT OBJECT(o) FROM Person AS o WHERE o.username= ?1" | * | * @ejb.finder signature = "java.util.Collection findByLastname(java.lang.String lastname)" | * query = "SELECT OBJECT(o) FROM Person AS o WHERE o.lastname= ?1" | * | * @ejb.pk class = "infrastructure.interfaces.PersonPK" | * package = "infrastructure.interfaces" | * | * @jboss.declared-sql signature = "java.util.Collection findAll()" | * | * @jboss.declared-sql signature = "infrastructure.interfaces.PersonLocal findByEmail(java.lang.String email)" | * where = "pk_person={0}" | * | * @jboss.declared-sql signature = "infrastructure.interfaces.PersonLocal findByUsername(java.lang.String username)" | * where = "username={0}" | * | * @jboss.declared-sql signature = "java.util.Collection findByLastname(java.lang.String lastname)" | * where = "lastname={0}" | * | * @jboss.persistence table-name = "Person" | * alter-table = "true" | * pk-constraint = "true" | * create-table = "true" | * remove-table = "true" | * | * @jboss.tuned-updates "true" | */ | public abstract class PersonBean implements EntityBean { | | public PersonBean() { | super(); | } | | public void setEntityContext(EntityContext ctx) | throws EJBException, | RemoteException { | } | | public void unsetEntityContext() throws EJBException, RemoteException { | } | | public void ejbRemove() | throws RemoveException, | EJBException, | RemoteException { | } | | public void ejbActivate() throws EJBException, RemoteException { | } | | public void ejbPassivate() throws EJBException, RemoteException { | } | | public void ejbLoad() throws EJBException, RemoteException { | } | | public void ejbStore() throws EJBException, RemoteException { | } | | /** | * Getter for CMP Field firstname | * | * | * @ejb.persistent-field | * @ejb.interface-method view-type="both" | */ | public abstract String getFirstname(); | | /** | * Setter for CMP Field firstname | * | * @ejb.interface-method view-type="both" | */ | public abstract void setFirstname(String value); | | /** | * Getter for CMP Field lastname | * | * | * @ejb.persistent-field | * @ejb.interface-method view-type="both" | */ | public abstract String getLastname(); | | /** | * Setter for CMP Field lastname | * | * @ejb.interface-method view-type="both" | */ | public abstract void setLastname(String value); | | /** | * Getter for CMP Field email | * | * @ejb.persistent-field | * | * @ejb.pk-field | * @ejb.interface-method view-type="both" | * @jboss.persistence dbindex = "true" | */ | public abstract String getEmail(); | | /** | * Setter for CMP Field email | * | * @ejb.interface-method view-type="both" | */ | public abstract void setEmail(String value); | | /** | * Getter for CMP Field username | * | * | * @ejb.persistent-field | * @ejb.pk-field | * @ejb.interface-method view-type="both" | * @jboss.persistence dbindex = "true" | */ | public abstract String getUsername(); | | /** | * Setter for CMP Field username | * | * @ejb.interface-method view-type="both" | */ | public abstract void setUsername(String value); | | /** | * Getter for CMP Field password | * | * | * @ejb.persistent-field | * @ejb.interface-method view-type="both" | */ | public abstract String getPassword(); | | /** | * Setter for CMP Field password | * | * @ejb.interface-method view-type="both" | */ | public abstract void setPassword(String value); | | /** | * Create method | * @ejb.create-method view-type = "local" | */ | public infrastructure.interfaces.PersonPK ejbCreate(PersonData data) | throws javax.ejb.CreateException { | | this.setEmail(data.getEmail()); | this.setFirstname(data.getFirstname()); | this.setLastname(data.getLastname()); | this.setPassword(data.getPassword()); | this.setUsername(data.getUsername()); | | return null; | } | /** | * Post Create method | */ | public void ejbPostCreate(PersonData data) throws javax.ejb.CreateException { | // TODO Auto-generated method stub | } | | } | product.java | package infrastructure.ejb; | | import infrastructure.interfaces.PersonLocal; | import infrastructure.interfaces.ProductData; | | import java.rmi.RemoteException; | | import javax.ejb.EJBException; | import javax.ejb.EntityBean; | import javax.ejb.EntityContext; | import javax.ejb.RemoveException; | | /** | * @ejb.bean name="Product" | * display-name="A Product" | * description="A product, is not a product persay." | * jndi-name="infrastructure/ejb/Product" | * local-jndi-name = "infrastructure/ejb/ProductLocal" | * type="CMP" | * cmp-version="2.x" | * view-type="both" | * | * @ejb.finder query="SELECT OBJECT(o) FROM Product AS o" | * signature="java.util.Collection findAll()" | * | * @ejb.finder query="SELECT OBJECT(o) FROM Product AS o WHERE o.code= ?1" | * signature="java.util.Collection findByCode(java.lang.String code)" | * | * @ejb.persistence table-name = "Product" | * | * @ejb.pk class = "infrastructure.interfaces.ProductPK" | * package = "infrastructure.interfaces" | * | * @jboss.persistence alter-table = "true" | * create-table = "true" | * pk-constraint = "true" | * remove-table = "false" | * table-name = "Product" | * | * @jboss.tuned-updates "true" | */ | public abstract class ProductBean implements EntityBean { | | public ProductBean() { | super(); | // TODO Auto-generated constructor stub | } | | public void setEntityContext(EntityContext ctx) | throws EJBException, | RemoteException { | // TODO Auto-generated method stub | | } | | public void unsetEntityContext() throws EJBException, RemoteException { | // TODO Auto-generated method stub | | } | | public void ejbRemove() | throws RemoveException, | EJBException, | RemoteException { | // TODO Auto-generated method stub | | } | | public void ejbActivate() throws EJBException, RemoteException { | // TODO Auto-generated method stub | | } | | public void ejbPassivate() throws EJBException, RemoteException { | // TODO Auto-generated method stub | | } | | public void ejbLoad() throws EJBException, RemoteException { | // TODO Auto-generated method stub | | } | | public void ejbStore() throws EJBException, RemoteException { | // TODO Auto-generated method stub | | } | | /** | * Create method | * @ejb.create-method view-type = "both" | */ | public infrastructure.interfaces.ProductPK ejbCreate(ProductData data) | throws javax.ejb.CreateException { | this.setCode(data.getCode()); | this.setFullname(data.getFullname()); | | return null; | } | /** | * Post Create method | */ | public void ejbPostCreate(ProductData data) | throws javax.ejb.CreateException { | // TODO Auto-generated method stub | } | /** | * Getter for CMP Field code | * | * | * @ejb.persistent-field | * @ejb.pk-field | * @ejb.interface-method view-type="both" | * @jboss.persistence dbindex = "true" | */ | public abstract java.lang.String getCode(); | | /** | * Setter for CMP Field code | * | * @ejb.interface-method view-type="both" | */ | public abstract void setCode(java.lang.String value); | | /** | * Getter for CMP Field fullname | * | * | * @ejb.persistent-field | * @ejb.pk-field | * @ejb.interface-method view-type="both" | * @jboss.persistence dbindex = "true" | */ | public abstract java.lang.String getFullname(); | | /** | * Setter for CMP Field fullname | * | * @ejb.interface-method view-type="both" | */ | public abstract void setFullname(java.lang.String value); | | /** | * Getter for CMP Field modified_date | * | * | * @ejb.persistent-field | * @ejb.interface-method view-type="both" | */ | public abstract java.util.Date getModified_date(); | | /** | * Setter for CMP Field modified_date | * | * @ejb.interface-method view-type="both" | */ | public abstract void setModified_date(java.util.Date value); | | /** | * Getter for CMR Relationship | * | * @ejb.interface-method view-type="both" | * @ejb.relation name = "ProductsForAPerson" | * role-name = "ProductForAPerson" | * target-role-name = "PersonHasProducts" | * target-cascade-delete = "no" | * target-ejb = "Person" | * | * @jboss.relation fk-column = "fk_person_email" | * fk-constraint = "true" | * related-pk-field = "email" | * @jboss.relation fk-column = "fk_person_username" | * fk-constraint = "true" | * related-pk-field = "username" | */ | public abstract PersonLocal getModifiedPerson(); | | /** | * Setter for CMR Relationship | * | * @ejb.interface-method view-type="both" | */ | public abstract void setModifiedPerson(PersonLocal value); | } | The key is that for compound keys, you must have multiple foreign key mappings, which is accomplished by using multiple @jboss.relation tags. Hope that helps! Joshua Preston. View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3918381#3918381 Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3918381 ------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Do you grep through log files for problems? Stop! Download the new AJAX search engine that makes searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642 _______________________________________________ JBoss-user mailing list JBoss-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jboss-user