Unable to generate constraint violation exception when testing Hibernate @Check constraints(测试Hibernate@Check约束时无法生成约束冲突异常)
问题描述
我正在使用Hibernate@Check
批注,但不能让我的测试在不满足约束时失败。当前仅对H2数据库使用默认的Spring启动配置。
我错过了什么?save(..)
之后是否应该有某种刷新?
运行测试时,我看到正确创建了表。如果我从日志中复制创建行,并使用它在我的"真正的"postgres数据库中创建表,我可以测试不同的插入,并看到此行完全可以使用约束。
实体
@Getter @Setter
@Entity @Check(constraints = "a IS NOT NULL OR b IS NOT NULL")
public class Constrained {
@Id @GeneratedValue
private Long id;
private String a, b;
}
测试
@DataJpaTest
@RunWith(SpringRunner.class)
public class HibernateCheckTest {
@Resource // this repo is just some boiler plate code but attached at
// the bottom of question
private ConstrainedRepository repo;
@Test @Transactional // also tried without @Transactional
public void test() {
Constrained c = new Constrained();
repo.save(c); // Am I wrong to expect some constraint exception here?
}
}
运行测试时的表格生成脚本
CREATE TABLE约束(id bigint非空,a varchar(255),b Varchar(255),主键(Id),检查(a不为空或b不为空 空))
存储库(在repo中查看不多,只是为了显示它):
public interface ConstrainedRepository
extends CrudRepository<Constrained, Long> {
}
但是
如果我使用EntityManager
将其添加到测试类:
@PersistenceContext
private EntityManager em;
和执行如下持久化操作:
em.persist(c);
em.flush();
我将获得异常,而不是repo.save(c)
。
和
使用repo.save(c)
更仔细地研究原始测试的日志显示:
org.springframework.test.context.transaction.TransactionContext:139-已回滚用于测试的事务:
...
测试异常=[空],
因此,出于某种原因,该错误只是被包装和记录。如何在使用仓库持久化时进行解包和抛出?
推荐答案
感谢codemonkey中的answer我能够找到解决方案。这可以通过添加:
来解决@org.springframework.transaction.annotation.Transactional(propagation =
Propagation.NOT_SUPPORTED)
到我的测试类。
这篇关于测试Hibernate@Check约束时无法生成约束冲突异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:测试Hibernate@Check约束时无法生成约束冲突异常
基础教程推荐
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01