带有ModelMapper和实体集合的StackOverflowError

时间:2018-08-31 07:43:04

标签: java collections modelmapper

我有实体和带有集合的dto以及oneToMany / manyToOne双向关系

例如:

public class Author implements Serializable {
    private int id;
    private String firstname;
    @OneToMany(mappedBy = "author")
    private Collection<Book> bookList;
    //GETTERS/SETTERS
}

public class Book implements Serializable {
    @ManyToOne
    @JoinColumn(name = "author_id", referencedColumnName = "id", nullable = false, insertable = false, updatable = false)
    private Author author;
    @ManyToOne
    @JoinColumn(name = "categorie_id", referencedColumnName = "id", nullable = false, insertable = false, updatable = false)
    private Categorie categorie;
    @OneToMany(mappedBy = "book")
    private Collection<Edition> editionList;
    //GETTERS/SETTERS
}

public class Categorie implements Serializable {
    private String name;
    @OneToMany(mappedBy = "categorie")
    private Collection<Book> bookList;
    //GETTERS/SETTERS
}

我使用ModelMapper:

    modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
   modelMapper.getConfiguration().setFieldAccessLevel(Configuration.AccessLevel.PRIVATE);
modelMapper.getConfiguration().setFieldMatchingEnabled(true);

但是当我尝试将集合和实体映射到DTO时,出现错误。

ModelMapper映射错误:

1)将org.library.webservice.model.Author映射到org.library.webservice.generation.AuthorDTO错误

1个错误 org.modelmapper.MappingException:ModelMapper映射错误:

1)将org.library.webservice.model.Author映射到org.library.webservice.generation.AuthorDTO错误

  

1个错误   org.modelmapper.internal.Errors.throwMappingExceptionIfErrorsExist(Errors.java:374)     在   org.modelmapper.internal.MappingEngineImpl.map(MappingEngineImpl.java:69)     在org.modelmapper.ModelMapper.mapInternal(ModelMapper.java:497)处   org.modelmapper.ModelMapper.map(ModelMapper.java:340)在   org.library.webservice.MapperUtils.map(MapperUtils.java:29)位于   org.library.webservice.MapperUtils.lambda $ map $ 0(MapperUtils.java:38)     在   java.util.stream.ReferencePipeline $ 3 $ 1.accept(ReferencePipeline.java:193)     在   java.util.ArrayList $ ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)     在   java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)     在   java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)     在   java.util.stream.ReduceOps $ ReduceOp.evaluateSequential(ReduceOps.java:708)     在   java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)     在   java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)     在org.library.webservice.MapperUtils.map(MapperUtils.java:38)处   org.library.webservice.AbstractService.findAll(AbstractService.java:25)     在   org.library.webservice.service.AuthorService.findAllAuthor(AuthorService.java:27)     在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处   sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:498)在   org.glassfish.webservices.InstanceResolverImpl $ 1.invoke(InstanceResolverImpl.java:144)     在com.sun.xml.ws.server.InvokerTube $ 2.invoke(InvokerTube.java:149)     在   com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:88)     在com.sun.xml.ws.api.pipe.Fiber .__ doRun(Fiber.java:1136)处   com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:1050)在   com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:1019)在   com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:877)在   com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:136)     在   org.glassfish.webservices.MonitoringPipe.process(MonitoringPipe.java:142)     在   com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:119)     在com.sun.xml.ws.api.pipe.Fiber .__ doRun(Fiber.java:1136)处   com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:1050)在   com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:1019)在   com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:877)在   com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:136)     在   com.sun.enterprise.security.webservices.CommonServerSecurityPipe.processRequest(CommonServerSecurityPipe.java:209)     在   com.sun.enterprise.security.webservices.CommonServerSecurityPipe.process(CommonServerSecurityPipe.java:141)     在   com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:119)     在com.sun.xml.ws.api.pipe.Fiber .__ doRun(Fiber.java:1136)处   com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:1050)在   com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:1019)在   com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:877)在   com.sun.xml.ws.server.WSEndpointImpl $ 2.process(WSEndpointImpl.java:419)     在   com.sun.xml.ws.transport.http.HttpAdapter $ HttpToolkit.handle(HttpAdapter.java:868)     在   com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:422)     在   com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:169)     在   org.glassfish.webservices.JAXWSServlet.doPost(JAXWSServlet.java:169)     在javax.servlet.http.HttpServlet.service(HttpServlet.java:706)处   javax.servlet.http.HttpServlet.service(HttpServlet.java:791)在   org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1580)     在   org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:258)     在   org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)     在   org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:652)     在   org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:591)     在com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)处   org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)     在   org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:371)     在   org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:238)     在   com.sun.enterprise.v3.services.impl.ContainerMapper $ HttpHandlerCallable.call(ContainerMapper.java:463)     在   com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:168)     在   org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)     在   org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)     在   org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:242)     在   org.glassfish.grizzly.filterchain.ExecutorResolver $ 9.execute(ExecutorResolver.java:119)     在   org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)     在   org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)     在   org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)     在   org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)     在   org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)     在   org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:539)     在   org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)     在   org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)     在   org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access $ 100(WorkerThreadIOStrategy.java:56)     在   org.glassfish.grizzly.strategies.WorkerThreadIOStrategy $ WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)     在   org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.doWork(AbstractThreadPool.java:593)     在   org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.run(AbstractThreadPool.java:573)     在java.lang.Thread.run(Thread.java:745)造成原因:   java.lang.StackOverflowError在   java.nio.charset.CharsetDecoder。(CharsetDecoder.java:233)在   sun.nio.cs.UTF_8 $ Decoder。(UTF_8.java:84)在   sun.nio.cs.UTF_8 $ Decoder。(UTF_8.java:81)在   sun.nio.cs.UTF_8.newDecoder(UTF_8.java:68)在   java.lang.StringCoding $ StringDecoder。(StringCoding.java:131)在   java.lang.StringCoding $ StringDecoder。(StringCoding.java:122)在   java.lang.StringCoding.decode(StringCoding.java:187)在   java.lang.String。(String.java:426)在   org.postgresql.core.Encoding.decode(Encoding.java:184)位于   org.postgresql.core.PGStream.receiveString(PGStream.java:328)在   org.postgresql.core.v3.QueryExecutorImpl.receiveCommandStatus(QueryExecutorImpl.java:2480)     在   org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2041)     在   org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:288)     在   org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:430)     在org.postgresql.jdbc.PgStatement.execute(PgStatement.java:356)处   org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:168)     在   org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:116)     在   org.apache.commons.dbcp2.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:82)     在   org.apache.commons.dbcp2.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:82)     在   org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:60)     在   org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.getResultSet(AbstractLoadPlanBasedLoader.java:419)     在   org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeQueryStatement(AbstractLoadPlanBasedLoader.java:191)     在   org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:121)     在   org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:86)     在   org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.load(AbstractLoadPlanBasedEntityLoader.java:185)     在   org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4265)     在   org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:509)     在   org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:479)     在   org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:220)     在   org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:279)     在   org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:122)     在   org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:90)     在org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1257)     在   org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:1140)     在   org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:682)     在org.hibernate.type.EntityType.resolve(EntityType.java:464)处   org.hibernate.type.ManyToOneType.resolve(ManyToOneType.java:239)位于   org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:172)     在   org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:129)     在   org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.performTwoPhaseLoad(AbstractRowReader.java:238)     在   org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.finishUp(AbstractRowReader.java:209)     在   org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:133)     在   org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:122)     在   org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:86)     在   org.hibernate.loader.collection.plan.AbstractLoadPlanBasedCollectionInitializer.initialize(AbstractLoadPlanBasedCollectionInitializer.java:87)     在   org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:691)     在   org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:75)     在   org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:2246)     在   org.hibernate.collection.internal.AbstractPersistentCollection $ 4.doWork(AbstractPersistentCollection.java:571)     在   org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:253)     在   org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:567)     在   org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:138)     在   org.hibernate.collection.internal.AbstractPersistentCollection $ 1.doWork(AbstractPersistentCollection.java:167)     在   org.hibernate.collection.internal.AbstractPersistentCollection $ 1.doWork(AbstractPersistentCollection.java:152)     在   org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:253)     在   org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:151)     在   org.hibernate.collection.internal.PersistentBag.size(PersistentBag.java:261)     在   org.modelmapper.internal.converter.IterableConverter.getSourceLength(IterableConverter.java:87)     在   org.modelmapper.internal.converter.IterableConverter.convert(IterableConverter.java:38)     在   org.modelmapper.internal.MappingEngineImpl.convert(MappingEngineImpl.java:336)   [.................]

当我删除实体上的收藏集时,这是可行的 有什么问题吗?

谢谢

0 个答案:

没有答案