Liferay多对多关系引发类强制exception

我正在创建一个展示liferay中关系的例子。我正在以书籍实体和作者的身份进行多对多的关系。我正在下面的博客中创建这个例子。

http://www.liferaysavvy.com/2014/01/liferay-service-builder-many-to-many_12.html

但是我遇到了类强制转换exception的问题。在博客中也有人写过,它正在抛出类强制转换exception。

11:05:00,422 ERROR [RuntimePageImpl-2][render_portlet_jsp:132] null java.lang.ClassCastException: com.ds.portlet.library.model.impl.AuthorImpl cannot be cast to com.ds.portlet.library.model.Author at com.ds.portlet.library.service.persistence.AuthorPersistenceImpl.fetchByPrimaryKey(AuthorPersistenceImpl.java:691) at com.ds.portlet.library.service.persistence.AuthorPersistenceImpl.findByPrimaryKey(AuthorPersistenceImpl.java:653) at com.ds.portlet.library.service.persistence.AuthorPersistenceImpl.findByPrimaryKey(AuthorPersistenceImpl.java:59) at com.liferay.portal.dao.shard.advice.ShardPersistenceAdvice.invoke(ShardPersistenceAdvice.java:54) at com.liferay.portal.service.persistence.impl.TableMapperImpl.getBaseModels(TableMapperImpl.java:400) at com.liferay.portal.service.persistence.impl.TableMapperImpl.getRightBaseModels(TableMapperImpl.java:265) at com.ds.portlet.library.service.persistence.BookPersistenceImpl.getAuthors(BookPersistenceImpl.java:1183) at com.ds.portlet.library.service.persistence.BookPersistenceImpl.getAuthors(BookPersistenceImpl.java:1162) at com.ds.portlet.library.service.persistence.BookPersistenceImpl.getAuthors(BookPersistenceImpl.java:1143) at com.liferay.portal.dao.shard.advice.ShardPersistenceAdvice.invoke(ShardPersistenceAdvice.java:54) at com.ds.portlet.library.service.base.AuthorLocalServiceBaseImpl.getBookAuthors(AuthorLocalServiceBaseImpl.java:374) at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:115) at com.liferay.portal.spring.transaction.DefaultTransactionExecutor.execute(DefaultTransactionExecutor.java:62) at com.liferay.portal.spring.transaction.TransactionInterceptor.invoke(TransactionInterceptor.java:51) at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:111) at com.liferay.portal.spring.aop.ServiceBeanAopProxy.invoke(ServiceBeanAopProxy.java:175) at com.ds.portlet.library.service.AuthorLocalServiceUtil.getBookAuthors(AuthorLocalServiceUtil.java:321) at org.apache.jsp.view_jsp._jspService(view_jsp.java:420) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 

我想知道这背后的原因。

我希望所涉及的课程在课程上两次 – 类似于David Nebinger在这篇文章中回答的内容 。 原因是他提到的:您可能在全局类路径以及WEB-INF/lib拥有xxx-service.jar ,或者您可能在WEB-INF/lib上拥有它并添加了WEB-INF/service作为源文件夹,以便相同的WEB-INF/classes再次在WEB-INF/classes

每当我看到类加载器问题,类不能被类型化为其合法的超类或接口时,这就是类路径上的重复类的问题。 在过去,这还包括一个荒谬的消息,即java对象不是java.lang.Object的后代 – 显然是错误的,但它意味着类路径上的其他 java.lang.Object。

棘手的是,他们需要一些特定的实例化顺序,并不总是很容易自愿地重现。 如果您发现了一个总是收到消息的情况,它可能总是以同样的方式失败。 Liferay服务构建者中的多对多关系可能是触发这些问题的一种方式。