cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Marcin Skladaniec <mar...@ish.com.au>
Subject SQLTemplate not faulting an object
Date Tue, 05 Jun 2007 05:33:42 GMT
Hi everyone

I'm having some troubles with SQLTemplate. The one I use is fairly  
simple:

SQLTemplate query = new SQLTemplate(Student.class, "select * from  
Student WHERE isDeleted = 1");

the student entity is defined by :

	<db-entity name="Student">
		<db-attribute name="studentNumber" type="BIGINT"/>
... some other fields here ...
		<db-attribute name="id" type="INTEGER" isPrimaryKey="true"  
isMandatory="true"/>
	</db-entity>

	<obj-entity name="Student"  
className="ish.oncourse.server.cayenne.Student"  
dbEntityName="Student"  
superClassName="ish.oncourse.server.cayenne.glue.CayenneDataObject" >
		<qualifier><![CDATA[(isDeleted = null) or (isDeleted = 0)]]></ 
qualifier>
		<obj-attribute name="studentNumber" type="java.lang.Long" db- 
attribute-path="studentNumber"/>
... some other fields here ...
		<obj-attribute name="id" type="java.lang.Integer" db-attribute- 
path="id"/>
	</obj-entity>

When the query is performed an exception is raised:

  [java] org.apache.cayenne.CayenneRuntimeException: [v.$ 
{project.version} ${project.build.date} ${project.build.time}] Null  
value for 'id'. Snapshot: org.apache.cayenne.DataRow@b549af[values= 
{STUDENTNUMBER=5, (Other fields in here, all in upper case), ID=241},  
version=-9223372036854775761, replaces=-9223372036854775808]. Prefix:  
null
[java]     at org.apache.cayenne.access.ObjectResolver.createObjectId 
(ObjectResolver.java:280)
      [java]     at  
org.apache.cayenne.access.ObjectResolver.objectFromDataRow 
(ObjectResolver.java:206)
      [java]     at  
org.apache.cayenne.access.ObjectResolver.objectsFromDataRows 
(ObjectResolver.java:120)
      [java]     at  
org.apache.cayenne.access.ObjectResolver.synchronizedObjectsFromDataRows 
(ObjectResolver.java:100)
      [java]     at  
org.apache.cayenne.access.DataDomainQueryAction.interceptObjectConversio 
n(DataDomainQueryAction.java:433)
      [java]     at  
org.apache.cayenne.access.DataDomainQueryAction.execute 
(DataDomainQueryAction.java:124)
      [java]     at org.apache.cayenne.access.DataDomain.onQuery 
(DataDomain.java:722)
      [java]     at  
org.apache.cayenne.intercept.DataChannelCallbackInterceptor.onQuery 
(DataChannelCallbackInterceptor.java:74)
      [java]     at  
org.apache.cayenne.util.ObjectContextQueryAction.runQuery 
(ObjectContextQueryAction.java:282)
      [java]     at  
org.apache.cayenne.access.DataContextQueryAction.execute 
(DataContextQueryAction.java:59)
      [java]     at org.apache.cayenne.access.DataContext.onQuery 
(DataContext.java:1321)
      [java]     at org.apache.cayenne.access.DataContext.performQuery 
(DataContext.java:1310)
      [java]     at  
org.apache.cayenne.intercept.ObjectContextDecorator.performQuery 
(ObjectContextDecorator.java:98)
      [java]     at  
ish.oncourse.server.services.DataPopulationService.runService 
(DataPopulationService.java:688)
      [java]     at ish.oncourse.server.services.Service.run 
(Service.java:174)
      [java]     at java.lang.Thread.run(Thread.java:613)

What is wrong ? Why when all my field properties are set to lowercase  
(like "id") the SQLTemplate returns a DataRow with only capital  
letters ?


I have to use the SQLTemplate since my model defines a qualifier  
"<qualifier><![CDATA[(isDeleted = null) or (isDeleted = 0)]]></ 
qualifier>" and I actually want to fetch the records with  
isDeleted=1. I tried different ways to waive the constraint on the  
data like:

ObjEntity studentEntity = new ObjEntity 
("ish.oncourse.server.cayenne.Student");
Expression exp = studentEntity.getDeclaredQualifier();
studentEntity.setDeclaredQualifier(null);
SelectQuery selectQuery = new SelectQuery(studentEntity);
studentEntity.setDeclaredQualifier(exp);

but nothing worked. Did someone achieve it ?

Thanks
Marcin
-------------------------->
ish
http://www.ish.com.au
Level 1, 30 Wilson Street Newtown 2042 Australia
phone +61 2 9550 5001   fax +61 2 9550 4001





Mime
View raw message