Hello,
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 involved/affected 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 has fields id, userid and chatroomid in the
chatuserloggedin-table.
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...)
P.P.S.: I also tried with using openjpa 1.2 in geronimo - the effect is the
same (certainly the trace starts with <openjpa-1.2.0 - but that´s all of
difference...)
--
View this message in context:
http://n2.nabble.com/Problems-with-openjpa-on-foreign-keys-%28says-%22no-field-named-in-class%22%29-tp1441729p1441729.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.