我的问题正好相反,这里的大多数问题是测试数据没有被插入,我的问题在测试中持续存在,但在通过控制器调用时不会。
我在这方面还是新手,所以可能犯了一些愚蠢的错误。感谢任何帮助!
这是我的设计。
项目1:业务逻辑层:实体、服务、Repo (Spring数据)、Oracle =
项目2:Spring MVC 4.3.3,Thymeleaf 3,import bll.jar,控制器调用BLL服务进行保存。日志中没有插入语句,只需选择语句。甲骨文序列号正在递增。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 Service方法
还有我的实体Cat有相关的实体但为了简洁我省略了
服务
@Transactional
public Cat save(Cat cat){
return catRepo.save(cat);
}
相关日志
2017-02-27 08:52:22调试SQL:109-选择catdts0_。0_ 0_。CAT_ ID=?2017-02-27 08:52:22 TRACE BasicBinder:81-将参数[1]绑定为[NUMERIC]-[1]…2017-02.27 08:22:22跟踪BasicExtractor:78-提取值([CAT_ID6_0_-02-27 08:52:22调试HibernateTransactionManager:759-启动事务提交2017-02-27 08:52:22调试HibernatTransactionManager:580-在会话[SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[];ActionQueue[insertions]上提交Hibernate事务=org.hibernate.engine.spi.ExecutableList@63cd240d更新=org.hibernate.engine.spi.ExecutableList@6262ff06删除=org.hibernate.engine.spi.ExecutableList@72d1cb79孤儿清除=org.hibernate.engine.spi.ExecutableList@3ff23a08收藏创作=org.hibernate.engine.spi.ExecutableList@35158cb7收集清除=org.hibernate.engine.spi.ExecutableList@407acfdc集合更新=org.hibernate.engine.spi.ExecutableList@3c0c4ea9集合队列DOPS=org.hibernate.engine.spi.ExecutableList@1200015aUnsolvedInsertDependencies=UnsolveEntityInsertActions[])]2017-02-27 08:52:22调试数据源实用程序:222-重置JDBC连接的只读标志[oracle.jdbc.driver.T4CConnection@1dfb6d07]2017-02-27 08:52:22调试HibernateTransactionManager:669-关闭Hibernate会话[SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[];操作队列[insertions]=org.hibernate.engine.spi.ExecutableList@63cd240d更新=org.hibernate.engine.spi.ExecutableList@6262ff06删除=org.hibernate.engine.spi.ExecutableList@72d1cb79孤儿清除=org.hibernate.engine.spi.ExecutableList@3ff23a08收藏创作=org.hibernate.engine.spi.ExecutableList@35158cb7收集清除=org.hibernate.engine.spi.ExecutableList@407acfdc集合更新=org.hibernate.engine.spi.ExecutableList@3c0c4ea9集合队列DOPS=org.hibernate.engine.spi.ExecutableList@1200015aUnsolvedInsertDependencies=UnsolveEntityInsertActions[]])]在事务处理后2017-02-27 08:52:22调试调度器Servlet:1251-渲染视图[org.thymeleaf.spring4.view.ThymeleafView@13f5fc54]在名为“appServlet”的DispatcherServlet中,2017-02-27 08:52:22调试可重新加载的ResourceBundleMessageSource:440-未找到[/resources/i18n/messages_en_GB]的属性文件-既没有普通属性也没有XML 2017-02-27 08:50:22调试可以重新加载的SourceBundleMessagesource:410-重新缓存文件名为[resources/i18n/messages_en]的属性-文件未被修改DEBUG DispatcherServlet:1000-已成功完成请求
如果我错过了任何重要的信息,然后让我知道要发布什么,我仍然在黑暗中摸索。
在@Naros的帮助下回答我自己的问题
原来我的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(),我怀疑其中一个在测试中调用,而另一个在我的web控制器中调用。删除了以下选项以解决问题。
public HibernateTransactionManager transactionManager(SessionFactory s)
许多记者将显示测试持续时间,以及标记缓慢的测试,如“spec”记者所示: 要调整被认为“慢”的东西,您可以使用以下slow()方法: describe('something slow', function() { this.slow(10000); it('should take long enough for me to go make a sandwich', function() { /
我的问题是,当我运行测试用例时,数据要插入到应用程序使用的数据库中。我可以不在DB中插入数据来测试它吗。
对代码基址的每一次更改都运行自动化测试 准备好开始在您的开发人员测试活动中大获全胜吗?在本期的 让开发自动化 中,开发自动化专家 Paul Duvall 介绍了几种自动化的开发人员测试,每一次改变源代码都能够运行这些测试。Paul 提供了 Selenium、DbUnit 和 JUnitPerf 测试的例子,即,如果经常 运行这些测试可以帮助您尽早发现应用程序的问题。 在像 Eclipse 那样的
我的观点中有一个功能。py,它将数据插入表1,但表1中的一个字段是另一个表(称为表2)主键的外键。 注:-表2目前为空(无数据)。 现在,我只想检查数据是否正确地插入到表1中,因此,我跳过了Django ORM中的外键,但是我得到了类似“列中的Null值”name“违反了notnull约束”这样的错误 有人能告诉我一个绕过这个(或)任何新方法的方法吗。
问题内容: 我需要计算用户在网站上花费的时间。登出时间与登出时间之间的区别是,给我类似“ X先生花了4个小时43分钟”。因此,为了存储the4小时43分钟,我这样声明: 时间NOT NULL 这是有效的还是更好的存储方式?我需要存储在数据库中,因为我还有其他计算需要将其用于+其他用例。 问题答案: 最好将其存储为整数秒数。 该会是干净和简单-即 正如Tristram所指出的,使用该字段存在局限性
我正在使用RestEasy进行Quarkus和Quarkus测试,并且在每次测试之前设置虚拟数据时遇到了问题。 我正在尝试在调用endpoint之前使用活动记录模式插入用户。在呼叫用户之后。persistAndFlush()(或者简单地调用.persist()),当向User实体请求用户计数时,它会正确地返回数据库中有一条记录。但是,当通过RestEasy调用endpoint时,它会向我提示,没有