You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cayenne.apache.org by Lawrence Gerstley <la...@gmail.com> on 2009/07/08 08:45:20 UTC

Re: Creating multiple datamaps on the fly

Hello,
Some time ago, I asked about creating multiple datamaps by cloning an
existing one, which worked fine initially, and now I find an odd hiccup when
using the cloned datamap for something more involved than a simple
SelectQuery. When I try to perform a query with a simple
"likeIgnoreCaseExp", I get the following exception:

*No reverse relationship exist for
org.apache.cayenne.map.DbRelationship@8ddb93
[name=toSourceEntity,toMany=false]*


When I debug my cloning code, part of it cycles through the DbEntities with
this method:
    public DbEntity cloneDbEntity(DbEntity originalDbEntity, String
newDbEntityName) {
        DbEntity returnDbEntity = new DbEntity(newDbEntityName);
        returnDbEntity.setSchema(originalDbEntity.getSchema());
        returnDbEntity.setCatalog(originalDbEntity.getCatalog());
        for (DbAttribute dbAttribute : originalDbEntity.getAttributes()) {
            returnDbEntity.addAttribute(dbAttribute);
        }
        for (DbRelationship dbRelationship :
originalDbEntity.getRelationships()) {
            returnDbEntity.addRelationship(dbRelationship);
        }
        return returnDbEntity;
    }

When I look at the dbRelationships that are iterated through, each have a
properly defined reverseRelationship. When I inspect the returnDbEntity that
is produced, I get the exception:

Entity 'assoc' has no parent MappingNamespace (such as DataMap)


This error may be nothing--the map appears to work, but I'm still stymied by
the lack of a reverse relationship when I go to execute the SelectQuery. Can
anyone tell what I am missing here? Is there a better example of cloning a
DataMap?

Thanks,

Lawrence

On Thu, Jun 4, 2009 at 11:01 AM, Lawrence Gerstley <la...@gmail.com>wrote:

> ---------- Forwarded message ----------
> From: Andrey Razumovsky <ra...@gmail.com>
> Date: Thu, Jun 4, 2009 at 4:21 AM
> Subject: Re: Creating multiple datamaps on the fly
> To: user@cayenne.apache.org
>
>
> Hi,
>
> I'm not sure that I correctly understood your problem, but cloning datamap
> is definitely possible. Alas, I don't know about any ready methods for
> that.
> You can either clone DataMap manually (i.e. create new map with new name,
> copy properties from original map, put there entities etc. with new names
> and then attach it to domain) or clone whole datamap via serialization and
> then change names of its "entries". Sort of second way is implemented in
> modeler's PasteAction.paste(...). Note that entity names must be unique in
> whole DataDomain.
>
> Andrey
>
> 2009/6/4 Lawrence Gerstley <la...@gmail.com>
>
> > Hello,
> >
> > I'm trying to create multiple DataMaps and attach them to my DataDomain
> on
> > the fly in an application. The DataMap itself that I created with the
> > modeler is fine, but I want to be able to create new ones on demand to
> point
> > to a new table set in my db. So, my DataMap might consist of DbEntities
> > whose prefixes all start with "lba1_". I can iterate through the map
> > attached to the domain loaded up like so:
> > ================================================================
> > for (DbEntity entity : currentMap.getDbEntities()) {
> >  if (entity.getName().indexOf("_") > 0) {
> >    entity.setName(entity.getName().replaceFirst(".*_", instancePrefix +
> > "_"));
> >  }
> > }
> > ================================================================
> > I'd like to clone the DataMap and then iterate through it with the code
> > above, and then add that DataMap to the DataDomain. Is that possible?
> >
> > Thanks,
> >
> > Lawrence
> >
> >
>
>
>
> --
> ============================
> Lawrence Gerstley, Ph.D.
> PSMI Consulting
>
> Cel: 415.694-0844
>



-- 
============================
Lawrence Gerstley, Ph.D.
PSMI Consulting

Cel: 415.694-0844