我正在创建一个示例来演示 liferay 中的关系。我正在以图书实体和作者的多对多关系为例。我将按照下面的博客创建此示例。
http://www.liferaysavvy.com/2014/01/liferay-service-builder-many-to-many_12.html 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)
我想知道这背后的原因。
我希望所涉及的类在类路径上有两次 - 类似于 David Nebinger 在中的回答这个帖子 https://www.liferay.com/community/forums/-/message_boards/message/33063340。他提到的原因是:你可能有你的xxx-service.jar
在全局类路径以及您的WEB-INF/lib
,或者你可能戴着它WEB-INF/lib
并添加了WEB-INF/service
作为源文件夹,以便相同的类位于WEB-INF/classes
again.
每当我看到类加载器出现类无法类型转换为其合法超类或接口的问题时,这就是类路径上重复类的问题。在古代,这还包括一个可笑的消息,即 java 对象不是 java.lang.Object 的后代 - 显然是错误的,但这意味着另一个类路径上的 java.lang.Object。
棘手的是,它们需要某种特定的实例化顺序,而这些顺序并不总是很容易重现。如果您发现始终会收到该消息的情况,那么它可能总是会以同样的方式失败。 Liferay 服务构建器中的多对多关系可能是触发这些问题的一种方式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)