cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mike Kienenberger" <mkien...@gmail.com>
Subject Re: vertical inheritance
Date Tue, 17 Apr 2007 16:37:05 GMT
Vertical inheritance is not natively supported by Cayenne yet
(although it will need to be to be JPA-compliant, so it'll happen
sooner rather than later).

I've made it work by creating custom templates which override
setPersistenceState() and then being careful how I construct queries.

http://cwiki.apache.org/CAY/is-inheritance-supported.html

I'm sure you'd need to do additional work to get it working with ROP.


On 4/17/07, Marcin Skladaniec <marcin@ish.com.au> wrote:
> Hi
>
> In our project we have tried using inheritance, this is the
> simplification of the map we are using:
>
> <db-entity name="AbstractNode">
>                 <db-attribute name="id" type="INTEGER" isPrimaryKey="true"
> isMandatory="true"/>
>                 <db-attribute name="isDeleted" type="BOOLEAN"/>
>                 <db-attribute name="modifiedOn" type="TIMESTAMP"/>
>                 <db-attribute name="name" type="VARCHAR" length="512"/>
>                 <db-attribute name="nodeType" type="VARCHAR" length="128"/>
> </db-entity>
> <obj-entity name="AbstractNode"
> className="ish.oncourse.server.cayenne.AbstractNode"
> clientClassName="ish.oncourse.cayenne.AbstractNode" lock-
> type="optimistic" dbEntityName="AbstractNode"
> superClassName="ish.oncourse.server.cayenne.glue.CayenneDataObject"
> clientSuperClassName="ish.oncourse.cayenne.glue.PersistentObject">
>                 <qualifier><![CDATA[(isDeleted = null) or (isDeleted = 0)]]></
> qualifier>
>                 <obj-attribute name="isDeleted" type="java.lang.Boolean" db-
> attribute-path="isDeleted"/>
>                 <obj-attribute name="modifiedOn" type="java.util.Date" db-attribute-
> path="modifiedOn"/>
>                 <obj-attribute name="name" type="java.lang.String" db-attribute-
> path="name"/>
>                 <obj-attribute name="nodeType" type="java.lang.String" db-attribute-
> path="nodeType"/>
> </obj-entity>
> <obj-entity name="DefaultNode" superEntityName="AbstractNode"
> className="ish.oncourse.server.cayenne. DefaultNode"
> clientClassName="ish.oncourse.cayenne. DefaultNode" lock-
> type="optimistic">
>                 <qualifier><![CDATA[nodeType = "D"]]></qualifier>
> </obj-entity>
>
> committing new objects works ok, but fetching the objects does not
> work (the presence of qualifier in DefaultNode does not matter):
> getContext().performQuery(new SelectQuery(Term.class)) throws
> exception on server which does not tell much:
>
> 17/04/2007 19:05:31 com.caucho.hessian.server.HessianSkeleton invoke
> WARNING: org.apache.cayenne.CayenneRuntimeException: [v.$
> {project.version} ${project.build.date} ${project.build.time}]
> Exception processing message org.apache.cayenne.remote.QueryMessage
> org.apache.cayenne.CayenneRuntimeException: [v.${project.version} $
> {project.build.date} ${project.build.time}] Exception processing
> message org.apache.cayenne.remote.QueryMessage
>          at
> org.apache.cayenne.remote.service.BaseRemoteService.processMessage
> (BaseRemoteService.java:169)
>          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>          at sun.reflect.NativeMethodAccessorImpl.invoke
> (NativeMethodAccessorImpl.java:39)
>          at sun.reflect.DelegatingMethodAccessorImpl.invoke
> (DelegatingMethodAccessorImpl.java:25)
>          at java.lang.reflect.Method.invoke(Method.java:585)
>          at com.caucho.hessian.server.HessianSkeleton.invoke
> (HessianSkeleton.java:157)
>          at com.caucho.hessian.server.HessianServlet.service
> (HessianServlet.java:365)
>          at ish.oncourse.server.CayenneServlet.service
> (CayenneServlet.java:102)
>          at org.mortbay.jetty.servlet.ServletHolder.handle
> (ServletHolder.java:428)
>          at org.mortbay.jetty.servlet.ServletHandler.dispatch
> (ServletHandler.java:677)
>          at org.mortbay.jetty.servlet.ServletHandler.handle
> (ServletHandler.java:568)
>          at org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
>          at org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
>          at org.mortbay.http.HttpServer.service(HttpServer.java:909)
>          at org.mortbay.http.HttpConnection.service
> (HttpConnection.java:820)
>          at org.mortbay.http.HttpConnection.handleNext
> (HttpConnection.java:986)
>          at org.mortbay.http.HttpConnection.handle
> (HttpConnection.java:837)
>          at org.mortbay.http.SocketListener.handleConnection
> (SocketListener.java:245)
>          at org.mortbay.util.ThreadedServer.handle
> (ThreadedServer.java:357)
>          at org.mortbay.util.ThreadPool$PoolThread.run
> (ThreadPool.java:534)
>
>
> Is the inheritance functionality is supposed to work with remote
> persistence ? Maybe there is an error in our code ?
>
> Marcin

Mime
View raw message