使用集合SET时的illegalArgument异常

时间:2016-11-04 06:33:20

标签: jpa

我正在使用JPA来保存数据。

我有几个嵌入式结构,我也创建了实体来满足一对多的连接条件。

使用以下方法并在ejb explorer中执行create方法后,我收到了一个非法的异常。

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinTable(name = "ZWF_FK_REQA", joinColumns = { @JoinColumn(name = "ID_REQ", referencedColumnName = "ID") }, inverseJoinColumns = { @JoinColumn(name = "ID_APPR", referencedColumnName = "ID", unique = true) })
    private Set<ApproverData> ApproverData;

getter setter方法如下。

但是我只是替换了 私人Set ApproverData

私人清单ApproverData

我没有收到任何错误,数据仍然存在。

在JPA中使用一对多关系时是否有使用SET的特殊方法?

这是我的批准者实体代码...我已删除了getter setter以节省空间

@Entity
@Table(name = "TMP_SM_APPR")
public class ApproverData {
@TableGenerator(name = "TableGenAppr", table = "TMP_GENEXT_IDGEN", pkColumnName = "GEN_NAME", valueColumnName = "GEN_VAL", pkColumnValue = "sm_appr", initialValue = 1, allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "TableGenAppr")
    @Id

    private String id;


    private String appName;

    @Temporal(TemporalType.TIMESTAMP)
    private Timestamp Datedec;

我用于持久性的jpa类是:

@Entity
@Table(name = "TMP_SM")
@SecondaryTables( { @SecondaryTable(name = "TMP_REQD", pkJoinColumns = @PrimaryKeyJoinColumn(name = "ID")) })

@NamedQueries( {
        @NamedQuery(name = "Persist.getAll", query = "SELECT po FROM PersistJpa po ORDER BY po.embData.createdAt DESC"),
        @NamedQuery(name = "Persist.getItemsCreatedBy", query = "SELECT po FROM PersistJpa po WHERE po.embData.createdBy = :createdBy ORDER BY po.embData.createdAt DESC") })

public class PersistJpa {

    @TableGenerator(name = "SmTableGen", table = "TMP_GENEXT_IDGEN", pkColumnName = "GEN_NAME", valueColumnName = "GEN_VAL", pkColumnValue = "sm", initialValue = 1, allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "SmTableGen")
    @Id
    private String id;


    private String status;



    @Embedded
    private EmbData embData;

    @Embedded
    private EmbReqData embReqData;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinTable(name = "TMP_SM_FK", joinColumns = { @JoinColumn(name = "ID_REQ", referencedColumnName = "ID") }, inverseJoinColumns = { @JoinColumn(name = "ID_APPR", referencedColumnName = "ID", unique = true) })
    private Set<ApproverData> ApproverData;

我的bean用于持久使用create()

@Stateless
public class SmBean implements SmBeanLocal {

    @PersistenceContext(name = "SM")
    EntityManager em;

    public SmBean() {
        // TODO Auto-generated constructor stub
    }
 // CREATE OPERATION
    public String createItem(PersistJpa item) {
        for (ApproverData data : item.getApproverData()) {
            data.setId(null);
        }
        em.persist(item);
        return item.getId()
}

在方法中使用SET而不是List时遇到的错误 private Set ApproverData;

是:

Error building method parameters. 
[EXCEPTION] 
java.lang.IllegalArgumentException: argument type mismatch 
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:597) 
at com.sap.ejbexplorer.business.invocation.impl.Query.buildComplexObject(Query.java:213) 
at com.sap.ejbexplorer.business.invocation.impl.Query.buildInvokationArguments(Query.java:136) 
at com.sap.ejbexplorer.business.invocation.impl.Query.execute(Query.java:76) 
at com.sap.ejbexplorer.wdgui.ExplorerView.onActionExecuteQuery(ExplorerView.java:998) 
at com.sap.ejbexplorer.wdgui.wdp.InternalExplorerView.wdInvokeEventHandler(InternalExplorerView.java:543) 
at com.sap.tc.webdynpro.progmodel.generation.DelegatingView.invokeEventHandler(DelegatingView.java:142) 
at com.sap.tc.webdynpro.progmodel.controller.Action.fire(Action.java:75) 
at com.sap.tc.webdynpro.clientserver.phases.ProcessingEventPhase.doHandleActionEvent(ProcessingEventPhase.java:159) 
at com.sap.tc.webdynpro.clientserver.phases.ProcessingEventPhase.execute(ProcessingEventPhase.java:94) 
at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.processRequestPartly(WindowPhaseModel.java:162) 
at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.doProcessRequest(WindowPhaseModel.java:110) 
at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.processRequest(WindowPhaseModel.java:97) 
at com.sap.tc.webdynpro.clientserver.window.WebDynproWindow.processRequest(WebDynproWindow.java:515) 
at com.sap.tc.webdynpro.clientserver.cal.AbstractClient.executeTasks(AbstractClient.java:58) 
at com.sap.tc.webdynpro.clientserver.cal.ClientApplication.doExecute(ClientApplication.java:1671) 
at com.sap.tc.webdynpro.clientserver.cal.ClientApplication.doProcessing(ClientApplication.java:1485) 
at com.sap.tc.webdynpro.clientserver.session.ApplicationSession.doApplicationProcessingStandalone(ApplicationSession.java:908) 
at com.sap.tc.webdynpro.clientserver.session.ApplicationSession.doApplicationProcessing(ApplicationSession.java:880) 
at com.sap.tc.webdynpro.clientserver.session.ApplicationSession.doProcessing(ApplicationSession.java:357) 
at com.sap.tc.webdynpro.clientserver.session.RequestManager.doProcessing(RequestManager.java:326) 
at com.sap.tc.webdynpro.serverimpl.core.AbstractDispatcherServlet.doContent(AbstractDispatcherServlet.java:87) 
at com.sap.tc.webdynpro.serverimpl.wdc.DispatcherServlet.doContent(DispatcherServlet.java:101) 
at com.sap.tc.webdynpro.serverimpl.core.AbstractDispatcherServlet.doPost(AbstractDispatcherServlet.java:62) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:754) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) 
at com.sap.engine.services.servlets_jsp.server.Invokable.invoke(Invokable.java:152) 
at com.sap.engine.services.servlets_jsp.server.Invokable.invoke(Invokable.java:38) 
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:466) 
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:210) 
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:441) 
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:430) 
at com.sap.engine.services.servlets_jsp.filters.DSRWebContainerFilter.process(DSRWebContainerFilter.java:38) 
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78) 
at com.sap.engine.services.servlets_jsp.filters.ServletSelector.process(ServletSelector.java:81) 
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78) 
at com.sap.engine.services.servlets_jsp.filters.ApplicationSelector.process(ApplicationSelector.java:278) 
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78) 
at com.sap.engine.services.httpserver.filters.WebContainerInvoker.process(WebContainerInvoker.java:81) 
at com.sap.engine.services.httpserver.chain.HostFilter.process(HostFilter.java:9) 
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78) 
at com.sap.engine.services.httpserver.filters.ResponseLogWriter.process(ResponseLogWriter.java:60) 
at com.sap.engine.services.httpserver.chain.HostFilter.process(HostFilter.java:9) 
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78) 
at com.sap.engine.services.httpserver.filters.DefineHostFilter.process(DefineHostFilter.java:27) 
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12) 
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78) 
at com.sap.engine.services.httpserver.filters.MonitoringFilter.process(MonitoringFilter.java:29) 
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12) 
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78) 
at com.sap.engine.services.httpserver.filters.SessionSizeFilter.process(SessionSizeFilter.java:26) 
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12) 
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78) 
at com.sap.engine.services.httpserver.filters.MemoryStatisticFilter.process(MemoryStatisticFilter.java:57) 
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12) 
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78) 
at com.sap.engine.services.httpserver.filters.DSRHttpFilter.process(DSRHttpFilter.java:43) 
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12) 
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78) 
at com.sap.engine.services.httpserver.server.Processor.chainedRequest(Processor.java:468) 
at com.sap.engine.services.httpserver.server.Processor$FCAProcessorThread.process(Processor.java:262) 
at com.sap.engine.services.httpserver.server.rcm.RequestProcessorThread.run(RequestProcessorThread.java:56) 
at com.sap.engine.core.thread.execution.Executable.run(Executable.java:122) 
at com.sap.engine.core.thread.execution.Executable.run(Executable.java:101) 
at com.sap.engine.core.thread.execution.CentralExecutor$SingleThread.run(CentralExecutor.java:328) 

请查看以下相关的创建方法:

Error invoking method "createItem(PersistJpa)". 
[EXCEPTION] 
com.sap.ejbexplorer.business.EJBExplorerBusinessException: Error building method parameters. 
at com.sap.ejbexplorer.business.invocation.impl.Query.buildInvokationArguments(Query.java:153) 
at com.sap.ejbexplorer.business.invocation.impl.Query.execute(Query.java:76) 
at com.sap.ejbexplorer.wdgui.ExplorerView.onActionExecuteQuery(ExplorerView.java:998) 
at com.sap.ejbexplorer.wdgui.wdp.InternalExplorerView.wdInvokeEventHandler(InternalExplorerView.java:543) 
at com.sap.tc.webdynpro.progmodel.generation.DelegatingView.invokeEventHandler(DelegatingView.java:142) 
at com.sap.tc.webdynpro.progmodel.controller.Action.fire(Action.java:75) 
at com.sap.tc.webdynpro.clientserver.phases.ProcessingEventPhase.doHandleActionEvent(ProcessingEventPhase.java:159) 
at com.sap.tc.webdynpro.clientserver.phases.ProcessingEventPhase.execute(ProcessingEventPhase.java:94) 
at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.processRequestPartly(WindowPhaseModel.java:162) 
at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.doProcessRequest(WindowPhaseModel.java:110) 
at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.processRequest(WindowPhaseModel.java:97) 
at com.sap.tc.webdynpro.clientserver.window.WebDynproWindow.processRequest(WebDynproWindow.java:515) 
at com.sap.tc.webdynpro.clientserver.cal.AbstractClient.executeTasks(AbstractClient.java:58) 
at com.sap.tc.webdynpro.clientserver.cal.ClientApplication.doExecute(ClientApplication.java:1671) 
at com.sap.tc.webdynpro.clientserver.cal.ClientApplication.doProcessing(ClientApplication.java:1485) 
at com.sap.tc.webdynpro.clientserver.session.ApplicationSession.doApplicationProcessingStandalone(ApplicationSession.java:908) 
at com.sap.tc.webdynpro.clientserver.session.ApplicationSession.doApplicationProcessing(ApplicationSession.java:880) 
at com.sap.tc.webdynpro.clientserver.session.ApplicationSession.doProcessing(ApplicationSession.java:357) 
at com.sap.tc.webdynpro.clientserver.session.RequestManager.doProcessing(RequestManager.java:326) 
at com.sap.tc.webdynpro.serverimpl.core.AbstractDispatcherServlet.doContent(AbstractDispatcherServlet.java:87) 
at com.sap.tc.webdynpro.serverimpl.wdc.DispatcherServlet.doContent(DispatcherServlet.java:101) 
at com.sap.tc.webdynpro.serverimpl.core.AbstractDispatcherServlet.doPost(AbstractDispatcherServlet.java:62) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:754) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) 
at com.sap.engine.services.servlets_jsp.server.Invokable.invoke(Invokable.java:152) 
at com.sap.engine.services.servlets_jsp.server.Invokable.invoke(Invokable.java:38) 
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:466) 
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:210) 
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:441) 
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:430) 
at com.sap.engine.services.servlets_jsp.filters.DSRWebContainerFilter.process(DSRWebContainerFilter.java:38) 
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78) 
at com.sap.engine.services.servlets_jsp.filters.ServletSelector.process(ServletSelector.java:81) 
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78) 
at com.sap.engine.services.servlets_jsp.filters.ApplicationSelector.process(ApplicationSelector.java:278) 
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78) 
at com.sap.engine.services.httpserver.filters.WebContainerInvoker.process(WebContainerInvoker.java:81) 
at com.sap.engine.services.httpserver.chain.HostFilter.process(HostFilter.java:9) 
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78) 
at com.sap.engine.services.httpserver.filters.ResponseLogWriter.process(ResponseLogWriter.java:60) 
at com.sap.engine.services.httpserver.chain.HostFilter.process(HostFilter.java:9) 
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78) 
at com.sap.engine.services.httpserver.filters.DefineHostFilter.process(DefineHostFilter.java:27) 
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12) 
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78) 
at com.sap.engine.services.httpserver.filters.MonitoringFilter.process(MonitoringFilter.java:29) 
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12) 
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78) 
at com.sap.engine.services.httpserver.filters.SessionSizeFilter.process(SessionSizeFilter.java:26) 
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12) 
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78) 
at com.sap.engine.services.httpserver.filters.MemoryStatisticFilter.process(MemoryStatisticFilter.java:57) 
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12) 
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78) 
at com.sap.engine.services.httpserver.filters.DSRHttpFilter.process(DSRHttpFilter.java:43) 
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12) 
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78) 
at com.sap.engine.services.httpserver.server.Processor.chainedRequest(Processor.java:468) 
at com.sap.engine.services.httpserver.server.Processor$FCAProcessorThread.process(Processor.java:262) 
at com.sap.engine.services.httpserver.server.rcm.RequestProcessorThread.run(RequestProcessorThread.java:56) 
at com.sap.engine.core.thread.execution.Executable.run(Executable.java:122) 
at com.sap.engine.core.thread.execution.Executable.run(Executable.java:101) 
at com.sap.engine.core.thread.execution.CentralExecutor$SingleThread.run(CentralExecutor.java:328) 
Caused by: java.lang.IllegalArgumentException: argument type mismatch 
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:597) 
at com.sap.ejbexplorer.business.invocation.impl.Query.buildComplexObject(Query.java:213) 
at com.sap.ejbexplorer.business.invocation.impl.Query.buildInvokationArguments(Query.java:136) 
... 62 more 

如果我将方法ApproverData的返回类型从Set更改为List,我不会收到任何错误并保留数据。

0 个答案:

没有答案