Java Liferay多对多关系引发类强制转换异常

Java Liferay多对多关系引发类强制转换异常,java,liferay,portlet,Java,Liferay,Portlet,我正在创建一个示例来演示liferay中的关系。我以Book entity和Author的多对多关系为例。我在下面的博客中创建了这个示例 但我面临着类强制转换异常的问题。在博客中也有人写到它正在抛出类强制转换异常 11:05:00,422 ERROR [RuntimePageImpl-2][render_portlet_jsp:132] null java.lang.ClassCastException: com.ds.portlet.library.model.impl.AuthorImpl

我正在创建一个示例来演示liferay中的关系。我以Book entity和Author的多对多关系为例。我在下面的博客中创建了这个示例

但我面临着类强制转换异常的问题。在博客中也有人写到它正在抛出类强制转换异常

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在中的回答。原因是他提到的:您可能将您的
xxx service.jar
放在全局类路径以及
WEB-INF/lib
中,或者您可以将它放在
WEB-INF/lib
中,并将
WEB-INF/service
添加为源文件夹,这样相同的类也可以放在
WEB-INF/classes

每当我看到类加载器出现无法将类类型转换为其合法超类或接口的问题时,这就是类路径上重复类的问题。在古代,这还包括一条荒谬的消息,即java对象不是java.lang.object的Decentant,这显然是错误的,但它指的是类路径上的另一个java.lang.object


棘手的是,它们需要一些特定的实例化顺序,而这些顺序并不总是容易复制的。如果你发现了一种你总是能得到信息的情况,它可能总是以同样的方式失败。Liferay的service builder中的多对多关系可能是触发这些问题的一种方式。

AuthorImpl.java类在哪里?你能在问题中添加它吗?liferay自动生成该文件。添加该文件没有任何意义。你实现了相应的equals()吗?它与任何equal方法无关,有没有人是liferay开发者?请回答这些问题。我检查过,但不是那样的,如果你能回答这个问题,可能会对我有很大帮助。…@suyash我仍然支持我在回答中的评论:每当我看到类加载器问题,一个类不能被类型化到它的合法超类或接口,这就是类路径上重复类的问题。看看这个。仔细检查。确保没有重复的。然后,当您找到重复项时,将其删除。问题已解决。我面临类似的问题,但我找不到任何重复条目,请您建议一些常见的地方,在大多数情况下都可以找到这些条目??将
tomcat/lib
tomcat/lib/ext
添加到上述目录列表中。以及为自己添加到类路径的任何其他目录。虽然不能保证这就是全部,但至少这些是重复类的常见位置。