【发布时间】:2017-02-27 05:10:33
【问题描述】:
我的问题恰恰相反,这里的大多数问题是关于没有插入测试数据,我的问题在测试中持续存在,但在通过控制器调用时不会。
我还是新手,所以可能犯了一些愚蠢的错误。任何帮助表示赞赏!
这是我的设置。
项目一:业务逻辑层:Entities、Services、Repo(Spring Data)、Oracle => bll.jar(测试保存,可以看到log中的insert语句)。文件:AppConfig、HibernateConfig、PersistenceConfig
项目2:Spring MVC 4.3.3,Thymeleaf 3,导入bll.jar,控制器调用BLL Service进行保存。日志中没有插入语句,只需选择语句。 Oracle 序列号正在递增。 save() 后返回的对象显示具有新 Id 的新对象。没有错误。部署在 JBoss Wildfly 中。
到目前为止我尝试了什么
- 认为这一定是提交或刷新问题,在 repo 和服务中添加了 saveAndFlush()。在 BLL 测试中工作,但是当从 MVC 调用时,它会给出错误 没有正在进行的事务。
- 检查了 MVC save() 并查找 bindingResult 错误,没有
- 日志似乎显示事务提交,所以不知道为什么它没有持久化
- 在 Data not inserted to db 之后的控制器 save() 上方添加了 @Transactional(propagation = Propagation.REQUIRED),但没有效果
控制器
@PostMapping(value="/create", params={"save"}) //
public String save(final Cat cat
, final BindingResult bindingResult, final ModelMap model){
if(bindingResult.hasErrors()){
logger.info(bindingResult.getAllErrors().toString());
return "cat/create";
}
Cat updatedCat = catService.save(cat); //saveAndFlush
model.clear();
return "redirect:/cat/create";
}
编辑 1
注意我的控制器没有@Transaction,只有我的 BLL 服务 方法
另外,我的实体 Cat 有相关实体,但为了简洁我省略了
服务
@Transactional
public Cat save(Cat cat){
return catRepo.save(cat);
}
相关日志
2017-02-27 08:52:22 DEBUG SQL:109 - 选择 catdts0_.CAT_ID 作为 CAT_ID6_0_0_, .. 来自 CAT_DT catdts0_ 其中 catdts0_.CAT_ID=? 2017-02-27 08:52:22 TRACE BasicBinder:81 - 绑定 参数 [1] 作为 [NUMERIC] - [1] .. 2017-02-27 08:52:22 TRACE BasicExtractor:78 - 提取值 ([CAT_ID6_0_0_] : [NUMERIC]) - [1] 2017-02-27 08:52:22 TRACE BasicExtractor:78 - 提取值 ([ID1_1_0_]:[NUMERIC])-[1] 2017-02-27 08:52:22 调试 EntityManagerFactoryUtils:435 - 关闭 JPA EntityManager 2017-02-27 08:52:22 调试 HibernateTransactionManager:759 - 启动 事务提交 2017-02-27 08:52:22 DEBUG HibernateTransactionManager:580 - 提交 Hibernate 事务 会议 [SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[]];ActionQueue[insertions=org.hibernate.engine.spi.ExecutableList@63cd240d 更新=org.hibernate.engine.spi.ExecutableList@6262ff06 删除=org.hibernate.engine.spi.ExecutableList@72d1cb79 orphanRemovals=org.hibernate.engine.spi.ExecutableList@3ff23a08 collectionCreations=org.hibernate.engine.spi.ExecutableList@35158cb7 collectionRemovals=org.hibernate.engine.spi.ExecutableList@407acfdc collectionUpdates=org.hibernate.engine.spi.ExecutableList@3c0c4ea9 collectionQueuedOps=org.hibernate.engine.spi.ExecutableList@1200015a unresolvedInsertDependencies=UnresolvedEntityInsertActions[]])] 2017-02-27 08:52:22 DEBUG DataSourceUtils:222 - 重置只读 JDBC 连接标志 [oracle.jdbc.driver.T4CConnection@1dfb6d07] 2017-02-27 08:52:22 调试 HibernateTransactionManager:669 - 关闭 休眠会话 [SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[]];ActionQueue[insertions=org.hibernate.engine.spi.ExecutableList@63cd240d 更新=org.hibernate.engine.spi.ExecutableList@6262ff06 删除=org.hibernate.engine.spi.ExecutableList@72d1cb79 orphanRemovals=org.hibernate.engine.spi.ExecutableList@3ff23a08 collectionCreations=org.hibernate.engine.spi.ExecutableList@35158cb7 collectionRemovals=org.hibernate.engine.spi.ExecutableList@407acfdc collectionUpdates=org.hibernate.engine.spi.ExecutableList@3c0c4ea9 collectionQueuedOps=org.hibernate.engine.spi.ExecutableList@1200015a unresolvedInsertDependencies=UnresolvedEntityInsertActions[]])] 之后 事务 2017-02-27 08:52:22 调试 DispatcherServlet:1251 - 渲染视图 [org.thymeleaf.spring4.view.ThymeleafView@13f5fc54] 名称为“appServlet”的 DispatcherServlet 2017-02-27 08:52:22 调试 ReloadableResourceBundleMessageSource:440 - 找不到属性文件 对于 [/resources/i18n/messages_en_GB] - 既不是普通属性也不是 XML 2017-02-27 08:52:22 调试 ReloadableResourceBundleMessageSource:410 - 重新缓存属性 文件名 [/resources/i18n/messages_en] - 文件未被修改 2017-02-27 08:52:22 调试 DispatcherServlet:1000 - 成功 完成请求
如果我错过了任何重要信息,请告诉我要发布的内容,我仍在摸索中。
【问题讨论】:
-
您确定您的应用程序配置在哪里设置事务管理 - 可能是您的测试配置?
-
感谢@Naros,您的评论很有帮助。虽然我只有一个上下文,但结果我的配置搞砸了。发布解决方案,以防对其他人有所帮助。
标签: spring hibernate spring-data-jpa thymeleaf