You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@geronimo.apache.org by Donald Woods <dw...@apache.org> on 2008/11/18 19:28:54 UTC

Re: Problems with Geronimos openjpa on foreign keys

I believe this is known problem in the OpenJPA 1.0.3 level we used in 
the 2.0.* and 2.1.* releases.  Can you try a recent 2.1.4-SNAPSHOT build 
(such as the one below) to see if OpenJPA 1.2.0 fixes this?


Subject: [BUILD] branches/2.1: Successful
Date: 18 Nov 2008 17:11:08 -0000
Geronimo Revision: 718564 built with tests included
See the full build-0800.log file at 
http://people.apache.org/builds/geronimo/server/binaries/2.1/20081118/build-0800.log
Download the binaries from 
http://people.apache.org/builds/geronimo/server/binaries/2.1/20081118


-Donald


jsmch wrote:
> Hallo one again,
> 
> i´ve problems with foreign-key-crossreferences using geronimo.
> 
> I try using a Query 
> 	Query q = em.createQuery("SELECT u FROM ChatUserLoggedIn u where
> u.chatroomid = 		null");
> 	List resultList = q.getResultList();
> 	List<ChatUserLoggedIn> list = resultList;
> 	return list; 
> 
> My entities look like this:
> ======================================
> @Entity
> public class ChatUserLoggedIn implements Serializable {
> 	
> 	@Id
> 	@GeneratedValue(strategy = GenerationType.AUTO)
> 	private int id;
> 
> 	@ManyToOne
> 	@JoinColumn(name="userid")
> 	private ChatUser user;
> 
> 	@ManyToOne	
> 	@JoinColumn(name="chatroomid", nullable=true)
> 	private ChatRoom room;
> 
> 	private static final long serialVersionUID = 1L;
> ======================================
> @Entity
> public class ChatUser implements Serializable{
> 	private static final long serialVersionUID = 1L;
> 	
> 	@Id
> 	@GeneratedValue(strategy = GenerationType.AUTO)
> 	private int id;
> 	
> 	@Column(length=20)
> 	private String username;
> 	
> 	@Column(length=20)
> 	private String password;
> 	@Temporal(TemporalType.TIMESTAMP)
> 	Date date;
> 	Date login;
> 	
> 	@ManyToOne
> 	@JoinColumn(name="roleid")
> 	private Role role;
> 	
> 	@OneToMany(mappedBy="user", cascade=CascadeType.REMOVE)
> 	private  List<ChatUserLoggedIn> chatuserloggedin;
> ========================================
> Therefore the database was fields id, userid and chatroomid in the
> chatuserloggedintable.
> But the result in executing this query is:
> ------------------------------------------------
> 11:41:27,937 OFF   [standard]
> -----------------------------------------------------------------------------------------
> <openjpa-1.0.3-r420667:677674 nonfatal user error>
> org.apache.openjpa.persistence.ArgumentException: An error occurred while
> parsing the query filter "SELECT u FROM ChatUserLoggedIn u where
> u.chatroomid = null". Error message: No field named "chatroomid" in class
> "class chat.entities.ChatUserLoggedIn".
> 	at
> org.apache.openjpa.kernel.exps.AbstractExpressionBuilder.parseException(AbstractExpressionBuilder.java:118)
> 	at
> org.apache.openjpa.kernel.exps.AbstractExpressionBuilder.traversePath(AbstractExpressionBuilder.java:284)
> 	at
> org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getPath(JPQLExpressionBuilder.java:1313)
> 	at
> org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getPathOrConstant(JPQLExpressionBuilder.java:1268)
> 	at
> org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.eval(JPQLExpressionBuilder.java:866)
> 	at
> org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getValue(JPQLExpressionBuilder.java:1362)
> 	at
> org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getValue(JPQLExpressionBuilder.java:1348)
> 	at
> org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.eval(JPQLExpressionBuilder.java:759)
> 	at
> org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getExpression(JPQLExpressionBuilder.java:1339)
> 	at
> org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.eval(JPQLExpressionBuilder.java:709)
> 	at
> org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.evalWhereClause(JPQLExpressionBuilder.java:484)
> 	at
> org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getQueryExpressions(JPQLExpressionBuilder.java:264)
> 	at org.apache.openjpa.kernel.jpql.JPQLParser.eval(JPQLParser.java:61)
> 	at
> org.apache.openjpa.kernel.ExpressionStoreQuery$DataStoreExecutor.<init>(ExpressionStoreQuery.java:656)
> 	at
> org.apache.openjpa.kernel.ExpressionStoreQuery.newDataStoreExecutor(ExpressionStoreQuery.java:165)
> 	at org.apache.openjpa.kernel.QueryImpl.createExecutor(QueryImpl.java:728)
> 	at
> org.apache.openjpa.kernel.QueryImpl.compileForDataStore(QueryImpl.java:686)
> 	at
> org.apache.openjpa.kernel.QueryImpl.compileForExecutor(QueryImpl.java:668)
> 	at org.apache.openjpa.kernel.QueryImpl.getOperation(QueryImpl.java:1487)
> 	at
> org.apache.openjpa.kernel.DelegatingQuery.getOperation(DelegatingQuery.java:123)
> 	at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:227)
> 	at
> org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:277)
> 	at
> chat.entities.access.DataAccessService.getOnlineUser(DataAccessService.java:558)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at
> org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:158)
> 	at
> org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:141)
> 	at
> org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:67)
> 	at
> org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:210)
> 	at
> org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:188)
> 	at
> org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
> 	at
> org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:217)
> 	at
> org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:77)
> 	at
> org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:321)
> 	at
> org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
> 	at $Proxy62.getOnlineUser(Unknown Source)
> 	at chat.kernel.impl.Client.isUserOnline(Client.java:275)
> 	at chat.kernel.impl.Client.login(Client.java:85)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at
> org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:158)
> 	at
> org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:141)
> 	at
> org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:67)
> 	at
> org.apache.openejb.core.stateful.StatefulContainer._invoke(StatefulContainer.java:451)
> 	at
> org.apache.openejb.core.stateful.StatefulContainer.businessMethod(StatefulContainer.java:413)
> 	at
> org.apache.openejb.core.stateful.StatefulContainer.invoke(StatefulContainer.java:271)
> 	at
> org.apache.openejb.server.ejbd.EjbRequestHandler.doEjbObject_BUSINESS_METHOD(EjbRequestHandler.java:238)
> 	at
> org.apache.openejb.server.ejbd.EjbRequestHandler.processRequest(EjbRequestHandler.java:129)
> 	at
> org.apache.openejb.server.ejbd.EjbDaemon.processEjbRequest(EjbDaemon.java:164)
> 	at org.apache.openejb.server.ejbd.EjbDaemon.service(EjbDaemon.java:122)
> 	at org.apache.openejb.server.ejbd.EjbDaemon.service(EjbDaemon.java:84)
> 	at org.apache.openejb.server.ejbd.EjbServer.service(EjbServer.java:60)
> 	at org.apache.openejb.server.ServicePool$2.run(ServicePool.java:78)
> 	at org.apache.openejb.server.ServicePool$3.run(ServicePool.java:101)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
> 	at java.lang.Thread.run(Unknown Source)
> ------------------------------------------------
>  
> Perhaps there are problems with persistence.xml? It looks like this:
> <?xml version="1.0" encoding="UTF-8"?>
> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
> http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
> 	<persistence-unit name="chat" transaction-type="JTA">
> 		<description>ContainerManagedJPA</description>
> 	
> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
> 		<jta-data-source>mySQLDatabasePool</jta-data-source>
> 		<non-jta-data-source>mySQLDatabasePool</non-jta-data-source>
> 		<class>chat.entities.Role</class>
> 		<class>chat.entities.ChatUserLoggedIn</class>
> 		<class>chat.entities.ChatUser</class>
> 		<class>chat.entities.ChatRoom</class>
> 		<class>chat.entities.Category</class>
> 		<properties>
> 			<property name="openjpa.jdbc.SynchronizeMappings"
> value="buildSchema(ForeignKeys=true)" />
> 			</properties> ...
> 
> Any idea?
> 
> P.S.: Simple Queries on chatuser-table with selecting on name are no
> problem. I´m also able to add new records to the database - but this
> foreign-key-thing did not work yet (but with this configuration it already
> worked under JBoss- this was the original app-environment...)
>