There's two ways to do this - if the newsdocs table doesn't have any fields
at all other than the doc_id and news_id, you don't even need to create an
ObjEntity for it (you still need a DbEntity though). Just create a flattened
relationship in the ObjEntity for News that goes to document (documentArray)
and crosses the newsdoc DbEntity. Create the same in reverse. Then you can
do:
news.addToDocumentArray(doc);
If you don't want to do this for whatever reason, usually because you have
other data in the newsdocs table like a sort order, etc, try:
News newsObj = (News) dataContext.createAndRegisterNewObject(News.class);
Document docObj = (Document) dataContext.createAndRegisterNewObject(
Document.class);
NewsDocument newsDocObj = (NewsDocument)
dataContext.createAndRegisterNewObject(NewsDocument.class);
// set other properties
newsDocObj.setToNews(newsObj);
newsDocObj.setToDocument(docObj);
dataContext.commitChanges();
Cayenne will automatically resolve the primary keys for you when it commits.
There is no need to commit twice. By the way, you are asking for trouble
when you create a DataObject via constructor. Be sure you know what you're
doing and why when doing that :)
Cris
On 4/5/06, I. Venuti <i.venut..aribel.it> wrote:
>
> Hi,
>
> I have a table (news) where I put some infos. I'd like to associate some
> documents to these news (maybe none). These documents resides in the
> table documents.
> I've created an association table called newsdocs, where there are the
> two id's: one for news and one for documents.
>
> The modeler recorgnises the relashionships (infact the object Newsdocs
> has only thwo relationships: toDocuments, toNews.
> Also in the object News there is an array (newsdocsArray) and in the
> object Documents (newsdocsArray).
>
> How can I create a relation between a news and a document?
>
> I have tried:
>
> 1) created News: nw1 (via createANdRegisterNewObject)
> 2) created Documents: doc2 (via createANdRegisterNewObject)
> 3) commit
> 4) created a black record for Newsdocs:
>
> Newsdocs ndoc = new Newsdocs();
> ndoc.setDataContext(...) // the same used in (via
> createANdRegisterNewObject)
> ndoc.setToDocuments(doc2); //****** NullPointerException
> ndoc.setToNews(nw1);
> doc2.addToNewsdocsArray(ndoc);
> nw1.add(via createANdRegisterNewObject)
>
> 5) commit
>
> Unfortunatly this doesn't work: there is a NullPointerException in ******
>
> Maybe I need to understand better the use of relashionships. Any
> suggestion is wellcome!
> Thanks a lot
>
> -- Ivan
>
>
This archive was generated by hypermail 2.0.0 : Wed Apr 05 2006 - 08:25:53 EDT