小编典典

Liferay多对多RelationShip引发类强制转换异常

java

我正在创建一个示例来演示liferay中的关系。我以Book实体和作者为例进行多对多关系。我正在下面的博客中创建此示例。

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

但是我遇到了类强制转换异常的问题。在博客中也有报道说它正在抛出类强制转换异常。

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)

我想知道这背后的原因。


阅读 202

收藏
2020-11-23

共1个答案

小编典典

我希望所涉及的类在类路径上两次出现-与David
Nebinger在这篇帖子中回答的类似。他提到的原因是:您可能同时xxx- service.jar在全局类路径中和中使用了您的类WEB-INF/lib,或者可能将您的类放在了全局类路径中WEB- INF/lib并添加WEB-INF/service为源文件夹,以便WEB-INF/classes再次放入相同的类。

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

棘手的事情是,他们需要一些特定的实例化顺序,这些实例化顺序并不总是很容易随便复制。如果发现总是收到消息的情况,则可能总是以相同的方式失败。Liferay服务构建器中的多对多关系可能是触发这些问题的一种方式。

2020-11-23