cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dave Merrin <dmer...@ipasystems.co.uk>
Subject Re: Select Query on Table with no Primary Key
Date Thu, 07 Jun 2007 09:33:11 GMT
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 <dmerrin@ipasystems.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 <dmerrin@ipasystems.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)
>> >>
>> >
>>
>>
>


Mime
View raw message