Hm, it doesn't work. I can perform a SQL query, it returns the correct number of records, but the properties are NULL.

SelectQuery q = new SelectQuery("Projects");
List projectsTest = this.context.get("test").performQuery(q);

for (Object o : projectsTest) {
    DataObject dObj = (DataObject) o;
    System.out.println(dObj.readProperty("columnname"));
}

I have defined a DataContext "test" as:

 DataMap map = new DataMap(mapName + " map");

 DbEntity entity = new DbEntity("tablename");
 map.addDbEntity(entity);

 DbAttribute attr = new CharacterDbAttribute("columnname", 20, true);
 entity.addAttribute(attr);

 // more attributes here
 // ...

 ObjEntity objEntity = new ObjEntity("Projects");
 objEntity.setDbEntity(entity);
 objEntity.setClassName(CayenneDataObject.class.getName());   // default
 map.addObjEntity(objEntity);

 DataNode node = new DataNode(mapName + " node");
 node.addDataMap(map);
 node.setDataSource(store.getDataSource());
 node.setAdapter(new AutoAdapter(store.getDataSource()));

 DataDomain domain = new DataDomain(mapName + " domain");
 domain.addNode(node);
 domain.addMap(map);

 this.context.put(mapName, domain.createDataContext());

The class CharacterDbAttribute sets the type to VARCHAR, mandatory and length properties. The field "store" holds the data sources (instances of PoolManager). mapName = "test".

I think, I don't need a full-defined ObjectEntity, because it is dynamic. I set only the class name (default) and the DbEntity instance. So where I have forgotten a call?

Thanks a lot
André

Andrus Adamchik <[email protected]> wrote:


On Jan 21, 2011, at 2:53 PM, André Rothe wrote:

Should I set the name explicitly to "org.apache.cayenne.CayenneDataObject" (or subclasses)?

Setting org.apache.cayenne.CayenneDataObject is optional (this is the default). If you want to use your own subclass, definitely call objEntity.setClassName(MyClass.class.getName()).

Andrus

Reply via email to