mysql - 在 Hibernate JUnit 测试生成约束异常时遇到问题

标签 mysql hibernate junit

我正在使用 Hibernate 4.0.1.Final 和 MySQL 5.5 数据库。我正在编写一个 Java 控制台应用程序。在 JUnit 测试中,我很难让测试失败。这是我正在测试的模型......

@Entity
@Table(name = "ic_domain")
public class Domain {

    @Id
    @Column(name = "DOMAIN_ID")
    private String domainId;

    @OneToOne(fetch = FetchType.EAGER, targetEntity = Organization.class)
    @JoinColumn(name = "ORGANIZATION_ID")
    private Organization org;

@Entity
@Table(name = "ic_organization")
public class Organization {

    @Id
    @Column(name = "ORGANIZATION_ID")
    private String organizationId;

我的问题是,在我的 JUnit 测试中,我试图创建一个不存在的外键,期望保存时失败,但它们从来没有失败。这是 JUnit 测试

@Test
public void testSaveDomainWithUnmathcedOrg() { 
    final Organization org = createDummyOrg();
    // Create an org id that doesn't exist.
    org.setOrganizationId("ZZZZ");
    final Domain domain = new Domain();
    final String id = UUID.randomUUID().toString().replace("-", "");
    domain.setDomainId(id);
    domain.setName(org.getName());
    domain.setOrg(org);
    m_domainDao.saveOrUpdate(domain);   
}   // testSaveDomainWithUnmatchedOrg

DAO 的代码是

public void saveOrUpdate(final Domain domain) {
    final Session session = sessionFactory.getCurrentSession();
    session.saveOrUpdate(obj);
}   // saveOrUpdate

“session.saveOrUpdate”不应该失败吗?我该如何制作它们?我不想在 JUnit 测试中提交数据,因为我不想用虚拟数据污染底层数据库,但如果这是唯一的方法,那就这样吧。

最佳答案

你不必提交,但需要刷新 session 来触发SQL语句的执行:

m_domainDao.saveOrUpdate(domain);    
sessionFactory.getCurrentSession().flush();

如果不想污染数据库,可以回滚事务。

关于mysql - 在 Hibernate JUnit 测试生成约束异常时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11473427/

相关文章:

python - 错误-无法安装flask-mysql

java - hibernate控制台配置在数据库连接中找不到jdbc驱动程序

java.lang.IllegalStateException : No transactional EntityManager available

MySql - 如果不存在则创建表否则截断?

mysql - 载入一个 csv 文件

mysql - 检查表中是否存在行

Java:验证类是否存在

java - Hamcrest describeMismatchSafely 总是在我的实现中打印 Object.toString()

android - Fragment getActivity() 在 Activity JUnit 测试中返回 null

mysql - MySQL 中根据时间间隔对行进行分组