Menu

@manytomany error on creating new linked entity - Impossible to execute Save action error raised

2017-10-19
2017-10-19
  • David Brown

    David Brown - 2017-10-19

    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 {

    @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;
    

    @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 {

    @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 = "ProjectID", length = 32, unique = true)
    private String projectid;
    
    @Column(name = "ProjectTitle", length = 255, unique = true)
    @Required
    private String projecttitle;
    
    @Stereotype("DATETIME")
    @Column(name = "PDate")
    @Required
    private java.util.Date pdate;
    
    @ManyToMany(mappedBy="newprojects")  
    private Set<Employee> employees;
    
    public String getProjectid() {
        return projectid;
    }
    
    public void setProjectid(String projectid) {
        this.projectid = projectid;
    }
    
    public String getProjecttitle() {
        return projecttitle;
    }
    
    public void setProjecttitle(String projecttitle) {
        this.projecttitle = projecttitle;
    }
    
    public java.util.Date getPdate() {
        return pdate;
    }
    
    public void setPdate(java.util.Date pdate) {
        this.pdate = pdate;
    }
    
    public Set<Employee> getEmployees() {
        return employees;
    }
    
    public void setEmployees(Set<Employee> employees) {
        this.employees = employees;
    }
    

    }

    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

     
  • David Brown

    David Brown - 2017-10-21

    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.

     
  • Javier Paniza

    Javier Paniza - 2017-10-23

    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:

    @NewAction("ManyToMany.new") // ADD THIS LINE
    @ManyToMany
    @JoinTable(
    name="EMP_PROJ",
    joinColumns=@JoinColumn(name="EMP_ID", referencedColumnName="ID"),
    inverseJoinColumns=@JoinColumn(name="Project", referencedColumnName="ProjectID"))
    private List<Newproject> newprojects;
    

    It should work.

    --------- 
    Help others in this forum as I help you.

     
  • David Brown

    David Brown - 2017-10-23

    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

     

Log in to post a comment.