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.
> Just
> a thought -- I've not tried it.
>
> /dev/mrg
>
>
> On 6/6/07, Dave Merrin <dmerri..pasystems.co.uk> wrote:
>>
>> Sorry, I forgot to mention that I won't be updating the data. I would
>> like to move round the database using relationships though.
>>
>> Apart from changing the database are there any hacks I could try to get
>> round 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 <dmerri..pasystems.co.uk> 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 control
>> over
>> >> 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.interceptObjectConversion(
>>
>> >>
>> >> 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)
>> >>
>> >
>>
>>
>
This archive was generated by hypermail 2.0.0 : Thu Jun 07 2007 - 05:36:41 EDT