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.DbRelationshi..ddb93
[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 <lawger..mail.com>wrote:
> ---------- Forwarded message ----------
> From: Andrey Razumovsky <razumovsky.andre..mail.com>
> Date: Thu, Jun 4, 2009 at 4:21 AM
> Subject: Re: Creating multiple datamaps on the fly
> To: use..ayenne.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 <lawger..mail.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 ConsultingCel: 415.694-0844
This archive was generated by hypermail 2.0.0 : Wed Jul 08 2009 - 02:46:04 EDT