Craig
On Jun 7, 2007, at 2:33 AM, Dave Merrin wrote:
OK, I've stepped through the code and got to the ObjectResolver. In there it checks for primary keys and throws an exception if there aren't any. Is there any way I can override this code easily to removed the primary key check?ObjectResolver(DataContext context, ObjEntity entity, boolean refresh,boolean resolveInheritanceHierarchy) { init(context, entity, refresh, resolveInheritanceHierarchy); } void init( DataContext context, ObjEntity entity, boolean refresh, boolean resolveInheritanceHierarchy) { // sanity check DbEntity dbEntity = entity.getDbEntity(); if (dbEntity == null) { throw new CayenneRuntimeException("ObjEntity '" + entity.getName() + "' has no DbEntity."); } this.primaryKey = dbEntity.getPrimaryKey(); if (primaryKey.size() == 0) {throw new CayenneRuntimeException("Won't be able to create ObjectId for '"+ entity.getName() + "'. Reason: DbEntity '" + dbEntity.getName() + "' has no Primary Key defined."); } this.context = context; this.cache = context.getObjectStore().getDataRowCache(); this.refreshObjects = refresh; this.entity = entity;this.inheritanceTree = context.getEntityResolver ().lookupInheritanceTree(entity);this.resolveInheritance = (inheritanceTree != null) ? resolveInheritanceHierarchy : false; } Michael Gentry wrote:The only thing I can think of trying (and maybe Andrus/Tore/Mike/ etc would have better ideas) is to model that ObjEntity (and perhaps others it relates to?) as read-only and see if Cayenne stops caring about missing a PK. Justa thought -- I've not tried it. /dev/mrg On 6/6/07, Dave Merrin <[EMAIL PROTECTED]> wrote:Sorry, I forgot to mention that I won't be updating the data. I wouldlike to move round the database using relationships though.Apart from changing the database are there any hacks I could try to getround this problem. Cheers, Dave Michael Gentry wrote:> Cayenne needs PKs in order to do UPDATEs. If you aren't modifying the> data, > you might try fetching as data rows instead of CayenneDataObjects. > I'm not> certain if that would work, but has a much higher chance. Of course,you > still won't be able to make a CayenneDataObject out of it. > > /dev/mrg > > > On 6/6/07, Dave Merrin <[EMAIL PROTECTED]> wrote: >> >> Hi, >> >> I'm trying to run a SelectQuery on a table with no primary key.>> Unfortunately it's not working. Can anybody help? I have no controlover >> the database so I can't add in primary keys. >> >> Cheers, >> >> Dave >> >> INFO QueryLogger: SELECT t0.ID, t0.KIND, t0.TIMESTAMP FROM >> MPS.STATETABLE_CPT t0 >> INFO QueryLogger: === returned 949 rows. - took 203 ms. >> INFO QueryLogger: +++ transaction committed.>> Exception in thread "main" org.apache.cayenne.CayenneRuntimeException:>> [v.2.0.3 May 6 2007] Won't be able to create ObjectId for>> 'StatetableCpt'. Reason: DbEntity 'STATETABLE_CPT' has no Primary Key>> defined. >> at>> org.apache.cayenne.access.ObjectResolver.init (ObjectResolver.java:75)>> at>> org.apache.cayenne.access.ObjectResolver.<init> (ObjectResolver.java:57)>> at >>org.apache.cayenne.access.DataDomainQueryAction.interceptObjectConve rsion(>> >> DataDomainQueryAction.java:319) >> at >> org.apache.cayenne.access.DataDomainQueryAction.execute( >> DataDomainQueryAction.java:116)>> at org.apache.cayenne.access.DataDomain.onQuery (DataDomain.java>> :746) >> at >> org.apache.cayenne.util.ObjectContextQueryAction.runQuery( >> ObjectContextQueryAction.java:217) >> at >> org.apache.cayenne.access.DataContextQueryAction.execute( >> DataContextQueryAction.java:54) >> at>> org.apache.cayenne.access.DataContext.onQuery(DataContext.java: 1387)>> at>> org.apache.cayenne.access.DataContext.performQuery (DataContext.java:1376) >> >> at>> ipa.printexpress.datahelpers.Session.fetchEntityCollection (Session.java>> :158) >> at>> ipa.px.importer.abb.ABBImporterMain.main(ABBImporterMain.java: 109)>> >
Craig Russell Architect, Sun Java Enterprise System http://java.sun.com/products/jdo 408 276-5638 mailto:[EMAIL PROTECTED] P.S. A good JDO? O, Gasp!
smime.p7s
Description: S/MIME cryptographic signature
