This content has been marked as final.
Show 1 reply
-
1. Re: Setting relation when Entity Bean has a compound primary
pdog4x4 Jan 19, 2006 8:54 AM (in response to rpa_rio)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.javapackage 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.javapackage 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.