Hi Dan, I agree with Evan 100%--both that your vendor should support this, and that the best way is to allow cmp and cmr fields to reference the same column name.
<vendor> The MVCSoft Persistence Manager supports this, and you can take advantage of it by checking a box in the mapping tool (or using the XDoclet support to generate a mapping file). MVCSoft currently provides value-added EJB 2.0 CMP for JBoss and WebLogic, with support for additional application servers available soon. </vendor> -Daniel O'Connor On 22 Nov 2001, at 9:16, Evan Ireland wrote: > Dan, > > I suggest that you talk to your vendor. The best way of dealing with this > is in the CMP provider. > > <vendor> > > With Sybase EAServer, you can simply map your 'storeNum' and 'store' cmp and > cmr fields to reference the same column name. > > </vendor> > > Dan Haywood wrote: > > > Hello all - here's a problem that has me stumped. > > > > In EJB 2.0 using CMP and CMR, it seems that for a PK that is composite, with one >part being a foreign key to a "parent" entity (in other words an identifying primary >key), gives rise to conflicting requirements on the bean. What's the right approach? > > > > For example, I have parent entity Store with a StorePK consisting of storeNum >field, and corresponding getStoreNum() / setStoreNum() accessor methods. I also have >a child entity Receipt, with a ReceiptPK of (storeNum, receiptNum), so that receipts >are identified by store ((1,1), (1,2) for store #1, (2,1), (2,2) for store #2 and so on). The corresponding methods on the ReceiptBean are getStoreNum() / setStoreNum() and getReceiptNum() / setReceiptNum(). > > > > Now, I want to define a bi-directional CMR between Store and Receipt, which means >I need a CMR method getStore() for ReceiptBean, returning a StoreLocal. > > > > Putting all this together, it seems the ReceiptBean must provide a getStore() and >a getStoreNum() method, both of which are implemented by the container. Ditto for the >setters. This seems horrible - there would be two columns in the underlying RDBMS >table. Also, it would seem that the onus is on the bean provider to keep these two values in sync. In other words, if I create a new Receipt and in the ejbCreate() call setStoreNum(), I would also need to do a lookup of StoreLocalHome.findByPrimaryKey() to obtain the corresponding StoreLocal, and then call setStore(). > > > > The alternative approach would be to define the ReceiptPK to contain a StoreLocal >reference, rather than a storeNumber value. Then, the methods would be the same and >would match. This doesn't make the ReceiptPK object transportable by a remote client, >however, so that feels wrong. Indeed, the EJB spec insists (and the J2EE RI verifier checks) that the PK must be a legal type for RMI-IIOP, so other than making the StoreLocal reference transient, this looks like it isn't a goer. > > > > Any insights gratefully received... > > > > =========================================================================== > > To unsubscribe, send email to [EMAIL PROTECTED] and include in the body > > of the message "signoff EJB-INTEREST". For general help, send email to > > [EMAIL PROTECTED] and include in the body of the message "help". > > > > > > > > > > > -- > _______________________________________________________________________________ > > Evan Ireland Sybase EAServer Engineering [EMAIL PROTECTED] > Wellington, New Zealand +64 4 934-5856 > > =========================================================================== > To unsubscribe, send email to [EMAIL PROTECTED] and include in the body > of the message "signoff EJB-INTEREST". For general help, send email to > [EMAIL PROTECTED] and include in the body of the message "help". > =========================================================================== To unsubscribe, send email to [EMAIL PROTECTED] and include in the body of the message "signoff EJB-INTEREST". For general help, send email to [EMAIL PROTECTED] and include in the body of the message "help".
