栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

实体不存在-spring+hibernate+ JPA

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

实体不存在-spring+hibernate+ JPA

好的,我知道了问题所在。我花了很长时间才弄清楚这一点,与我的数据库配置无关,所以我想为遇到类似问题的人们提供帮助。

Spring文档指出以下内容:

<tx:annotation-driven/>
仅在定义的相同应用程序上下文中在bean上查找@Transactional。这意味着,如果
<tx:annotation- driven/>
为DispatcherServlet 放入 WebApplicationContext,则仅在控制器而不是服务中检查@Transactional bean。有关更多信息,请参见第15.2节“ DispatcherServlet”。

我的原始帖子中没有发布的是我的Servlet定义,其中包含以下几行配置代码:

myServlet.xml

<context:annotation-config /> <context:component-scan base-package="com.myDomain.*" />

这会将所有带注释的Bean(包括控制器,服务和存储库)带入Servlet上下文而不是应用程序上下文。问题就在这里。当Spring寻找用@Transactional注释的bean(由于

<tx:annotation-driven/>
config.xml文件中存在)时,它将在应用程序上下文中寻找它们。而且,根据我在上一个线程中发布的配置,没有将任何bean加载到我的应用程序上下文中……它们都在servlet上下文中。因此,当我的servlet调用以@Service&@Transactional 注释的 bean时,使用的是未由事务代理包装的bean。因此,没有交易。诀窍(而是正确的方法)是通过以下方式更改我的配置文件:

myServlet.xml

<context:annotation-config /> <context:component-scan base-package="com.myDomain.servlets" />

config.xml

<context:annotation-config /> <context:component-scan base-package="com.myDomain.dao" /> <context:component-scan base-package="com.myDomain.services" />

此配置确保所有Controller都存在于servlet上下文中,而Transactional Services和Repository存在于 _它们所属_的应用程序上下文中。最后,经过许多不眠之夜,我的数据库写操作仍在继续。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/412871.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号