首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有spring-data-jpa的ClassCastException

带有spring-data-jpa的ClassCastException
EN

Stack Overflow用户
提问于 2019-10-14 08:36:31
回答 1查看 290关注 0票数 0

我正在处理和Spring数据。

我有三个项目:

  • doc.Web应用程序,它是我的文档web services.
  • sign-ws.的端点Web应用程序,它是我的标志web services.
  • data-ws.的端点包含所有jpa实体(@Entity)、spring存储库(@Repository)和spring服务类(@

)的Jar模块。

doc和sign与data-ws有依赖关系,所以数据-ws.jar包含在doc-ws.war和签署-ws.war中。

当我单独部署doc web应用程序时,所有的web服务测试都可以正常工作。当我单独部署签署-ws web应用程序时,所有的web服务测试都可以正常工作。但是,当我将两个web应用程序部署在同一个JBossEAP7.1中时,当我执行web服务测试时,就会得到ClassCastExceptions。

java.lang.ClassCastException:不能将com.ieci.mugeju.data.entity.IdocConfiguration转换为com.ieci.mugeju.data.entity.IdocConfiguration

代码语言:javascript
复制
    List<IdocConfiguration> properties = idocConfigurationRepository.findAll();   <-- works fine

    for (IdocConfiguration property: properties)    <-- Here throws the ClassCastException
    {
       .... // CODE
    }

异常消息引用相同的jpa实体(com.ieci.mugeju.data.entity.IdocConfiguration),,所以我不明白为什么要抛出这个异常。

这肯定是两个web应用程序之间的类加载问题,但我不确定。

我正在使用JBoss EAP7.1,spring JPA2.0.5,eclipseling2.6.4,spring core 3.0.1。

知道我为什么会有这个例外吗?我怎么能解决呢?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-14 12:58:41

我发现了问题所在。当我定义'entityManagerFactory‘时,我没有设置名为'persistenceUnitName’的属性。然后,在创建持久性上下文时,将在两个web项目中使用“默认”的名称创建该上下文。

代码语言:javascript
复制
<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="jpaVendorAdapter" ref="jpaAdapter" />
    <property name="jpaDialect" ref="jpaDialect"/>      
    <property name="packagesToScan" value="com.ieci.mugeju.data.entity" />              
    ...
</bean>

我不知道为什么,但是第二个项目的“查找存储库方法”返回在第一个项目类装入器中定义的jpa实体类。非常奇怪的行为,我期望每个web应用程序使用自己的类加载程序,并相互隔离。

如果我为每个项目设置了一个persistenceUnitName,那么一切都很好,每个web应用程序都使用自己的类加载器。

代码语言:javascript
复制
<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="jpaVendorAdapter" ref="jpaAdapter" />
    <property name="jpaDialect" ref="jpaDialect"/>      
    <property name="packagesToScan" value="com.ieci.mugeju.data.entity" />      
    <property name="persistenceUnitName" value="${spring.application.name}" />
    ...
</bean>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58372920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档