Going around in circles, probably trying to do something that cannot be done without some coding! Appreciate any pointer in the right direction, if only to point me at a previous solution that I cannot find!!
OpenXava 5.7.1 MySQL, Tomcat
@manytomany - I want to create one side of the manytomany and then select 'New' to create other side of the Entity.
I have cut this down to bare bones and still see the problem. Entities are Employee and Newproject (code is below trace) with an intersection table that I let OpenXava UpdateSchema create from Eclipse.
I can create one side of the relationship - save the record and then go into the detail of the record and select 'New' for other side of the relationship and get the following:-
WARNING: WARNING!: Member employee of Newproject not validated: Type unknown (property, reference, collection)
Oct 19, 2017 5:45:10 PM org.openxava.model.impl.MapFacadeBean create
SEVERE: Member employee not found in model Newproject
org.openxava.util.XavaException: Member employee not found in model Newproject
at org.openxava.model.impl.MapFacadeBean.convertSubmapsInObject(MapFacadeBean.java:1725)
at org.openxava.model.impl.MapFacadeBean.create(MapFacadeBean.java:790)
at org.openxava.model.impl.MapFacadeBean.create(MapFacadeBean.java:44)
at org.openxava.model.MapFacade.create(MapFacade.java:112)
at org.openxava.actions.SaveElementInCollectionAction.create(SaveElementInCollectionAction.java:84)
at org.openxava.actions.SaveElementInCollectionAction.saveCollectionElement(SaveElementInCollectionAction.java:66)
at org.openxava.actions.SaveElementInCollectionAction.execute(SaveElementInCollectionAction.java:33)
at org.openxava.controller.ModuleManager.executeAction(ModuleManager.java:559)
at org.openxava.controller.ModuleManager.executeAction(ModuleManager.java:457)
at org.openxava.controller.ModuleManager.execute(ModuleManager.java:418)
at org.apache.jsp.xava.execute_jsp._jspService(execute_jsp.java:195)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:605)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:544)
at org.openxava.web.servlets.Servlets.getURIAsStream(Servlets.java:72)
at org.openxava.web.dwr.Module.getURIAsStream(Module.java:236)
at org.openxava.web.dwr.Module.request(Module.java:63)
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.directwebremoting.impl.ExecuteAjaxFilter.doFilter(ExecuteAjaxFilter.java:34)
at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:428)
at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:431)
at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:283)
at org.directwebremoting.servlet.PlainCallHandler.handle(PlainCallHandler.java:52)
at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101)
at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:146)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
@Id
@Hidden // The property is not shown to the user. It's an internal identifier
@GeneratedValue(generator="system-uuid") // Universally Unique Identifier (1)
@GenericGenerator(name="system-uuid", strategy = "uuid")
@Column(name="ID",length=32,unique=true)
private String id;
Any ideas? or do I just need to manually code the manytomany relationship insert and accept that JPA and OpenXava do not support what I am tryin to do.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Going around in circles, probably trying to do something that cannot be done without some coding! Appreciate any pointer in the right direction, if only to point me at a previous solution that I cannot find!!
OpenXava 5.7.1 MySQL, Tomcat
@manytomany - I want to create one side of the manytomany and then select 'New' to create other side of the Entity.
I have cut this down to bare bones and still see the problem. Entities are Employee and Newproject (code is below trace) with an intersection table that I let OpenXava UpdateSchema create from Eclipse.
I can create one side of the relationship - save the record and then go into the detail of the record and select 'New' for other side of the relationship and get the following:-
WARNING: WARNING!: Member employee of Newproject not validated: Type unknown (property, reference, collection)
Oct 19, 2017 5:45:10 PM org.openxava.model.impl.MapFacadeBean create
SEVERE: Member employee not found in model Newproject
org.openxava.util.XavaException: Member employee not found in model Newproject
at org.openxava.model.impl.MapFacadeBean.convertSubmapsInObject(MapFacadeBean.java:1725)
at org.openxava.model.impl.MapFacadeBean.create(MapFacadeBean.java:790)
at org.openxava.model.impl.MapFacadeBean.create(MapFacadeBean.java:44)
at org.openxava.model.MapFacade.create(MapFacade.java:112)
at org.openxava.actions.SaveElementInCollectionAction.create(SaveElementInCollectionAction.java:84)
at org.openxava.actions.SaveElementInCollectionAction.saveCollectionElement(SaveElementInCollectionAction.java:66)
at org.openxava.actions.SaveElementInCollectionAction.execute(SaveElementInCollectionAction.java:33)
at org.openxava.controller.ModuleManager.executeAction(ModuleManager.java:559)
at org.openxava.controller.ModuleManager.executeAction(ModuleManager.java:457)
at org.openxava.controller.ModuleManager.execute(ModuleManager.java:418)
at org.apache.jsp.xava.execute_jsp._jspService(execute_jsp.java:195)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:605)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:544)
at org.openxava.web.servlets.Servlets.getURIAsStream(Servlets.java:72)
at org.openxava.web.dwr.Module.getURIAsStream(Module.java:236)
at org.openxava.web.dwr.Module.request(Module.java:63)
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.directwebremoting.impl.ExecuteAjaxFilter.doFilter(ExecuteAjaxFilter.java:34)
at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:428)
at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:431)
at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:283)
at org.directwebremoting.servlet.PlainCallHandler.handle(PlainCallHandler.java:52)
at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101)
at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:146)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Code
package efd.model;
import java.util.;
import javax.persistence.;
import org.hibernate.annotations.GenericGenerator;
import org.openxava.annotations.*;
@Entity
public class Employee {
@Column(name="ename",length=40)
private String ename;
@ManyToMany
@JoinTable(
name="EMP_PROJ",
joinColumns=@JoinColumn(name="EMP_ID", referencedColumnName="ID"),
inverseJoinColumns=@JoinColumn(name="Project", referencedColumnName="ProjectID"))
private List<Newproject> newprojects;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public List<Newproject> getNewprojects() {
return newprojects;
}
public void setNewprojects(List<Newproject> newprojects) {
this.newprojects = newprojects;
}
}
and
package efd.model;
import java.util.;
import javax.persistence.;
import org.hibernate.annotations.GenericGenerator;
import org.openxava.annotations.*;
@Entity
@Table(name = "Newproject")
public class Newproject {
}
Database Tables
Table: employee
Columns:
ID varchar(32) PK
ename varchar(40)
Table: emp_proj
Columns:
EMP_ID varchar(32)
Project varchar(32)
Table: newproject
Columns:
ProjectID varchar(32) PK
PDate datetime
ProjectTitle varchar(255)
thanks,
David
London UK
Any ideas? or do I just need to manually code the manytomany relationship insert and accept that JPA and OpenXava do not support what I am tryin to do.
Hi David,
This is a bug we plan solve for 5.8.1. But don't worry, in the meantime just annotate your collection with @NewAction("ManyToMany.new"), thus:
It should work.
---------
Help others in this forum as I help you.
Javier,
Wow. Brilliantly fast response and 'It does work".
Just bought one of your books, it is still useful to have a clutch of paper to thumb through rather than a PDF..
Many, many thanks.
David