我的问题完全相反,这里的大多数问题都是未插入测试数据,我的测试数据仍在测试中,但在通过控制器调用时则没有。
我还是新手,所以可能会犯一些愚蠢的错误。任何帮助表示赞赏!
这是我的设置。
项目1 :业务逻辑层:实体,服务,回购(Spring数据),Oracle => bll.jar(测试保存,可以在日志中看到插入语句)。文件:AppConfig,HibernateConfig,PersistenceConfig
项目2 :Spring MVC 4.3.3,Thymeleaf 3,导入bll.jar,控制器调用BLL Service进行保存。日志中没有insert语句,只是select语句。 Oracle序列号递增。 save()之后返回的对象显示具有新Id的新对象。没错。部署在JBoss Wildfly中。
到目前为止我尝试了什么
控制器
@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 DEBUG EntityManagerFactoryUtils:435 - 关闭JPA EntityManager 2017-02-27 08:52:22 DEBUG HibernateTransactionManager:759 - 启动 transaction commit 2017-02-27 08:52:22 DEBUG HibernateTransactionManager:580 - 提交Hibernate事务 会议 [SessionImpl(PersistenceContext [entityKeys = [],collectionKeys = []]; ActionQueue [insertions=org.hibernate.engine.spi.ExecutableList@63cd240d updates=org.hibernate.engine.spi.ExecutableList@6262ff06 deletions=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 DEBUG HibernateTransactionManager:669 - 关闭 Hibernate Session [SessionImpl(PersistenceContext [entityKeys = [],collectionKeys = []]; ActionQueue [insertions=org.hibernate.engine.spi.ExecutableList@63cd240d updates=org.hibernate.engine.spi.ExecutableList@6262ff06 deletions=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 []])]之后 transaction 2017-02-27 08:52:22 DEBUG DispatcherServlet:1251 - 渲染视图[org.thymeleaf.spring4.view.ThymeleafView@13f5fc54] in 具有名称' appServlet'的DispatcherServlet 2017-02-27 08:52:22 DEBUG ReloadableResourceBundleMessageSource:440 - 找不到属性文件 for [/ resources / i18n / messages_en_GB] - 既不是普通的属性也不是 XML 2017-02-27 08:52:22 DEBUG ReloadableResourceBundleMessageSource:410 - 重新缓存属性 filename [/ resources / i18n / messages_en] - 文件尚未修改 2017-02-27 08:52:22 DEBUG DispatcherServlet:1000 - 成功 已完成的请求
如果我错过了任何重要信息,请告诉我要发布什么,我仍然在黑暗中摸索。
答案 0 :(得分:1)
在@Naros的帮助下回答我自己的问题
原来我的PersistenceConfig搞砸了。
PersistenceConfig
public class PersistenceConfig {
...
@Bean
public PlatformTransactionManager transactionManager()
{
EntityManagerFactory factory = entityManagerFactory().getObject();
return new JpaTransactionManager(factory);
}
@Bean
@Autowired
public HibernateTransactionManager transactionManager(SessionFactory s) {
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(s);
return txManager;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory()
{
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setGenerateDdl(false); //was true
vendorAdapter.setShowSql(true);
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setDataSource(dataSource());
factory.setJpaVendorAdapter(vendorAdapter);
factory.setJpaProperties(jpaProperties());
factory.setPackagesToScan("ae.tbits.atn.aiwacore.common.model");
return factory;
}
@Bean
public DataSource dataSource() {
...
return dataSource;
}
}
有2个transactionManager(),我怀疑一个是在Test中调用而另一个是在我的web控制器中调用的。删除了以下内容以解决问题。
public HibernateTransactionManager transactionManager(SessionFactory s)