给定其类别或类型,是否有任何方法可以创建持久性实体示例?

时间:2019-06-13 21:04:35

标签: hibernate hibernate-envers

我正在使用Hibernate Envers审核实体更改,并且我们的项目中有很多经过审核的Hibernate实体。因此,我想编写一个对每个实体执行以下操作的测试: 1)创建给定类的示例对象。 2)使用实体管理器将该对象持久保存到数据库中。 3)检查是否创建了相应的审核记录。

第一步的主要问题,我正在寻找有关如何以一般方式实施的想法?

我尝试使用反射来填充主要字段,但由于不同的休眠错误,某些实体无法保存-例如不存在外键或未填充某些非null字段或应预定义ID等。 / p>

所以我想要这样的东西

    for (aClass in auditedClasses) {
        val example = createFilledEntityGivenItsClass(aClass)
        entityManager.persist(example)
        val pk = entityManager.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier(entity) // extracting primary key from entity.
        classToPKMap.put(aClass,  pk)
    }
    ....
    // using Envers to search for audit records.
    ....

所以最困难的部分是实际实现此createFilledEntityGivenItsClass方法。

用例: 一些开发人员添加了新的实体类型,将其标记为@Audited,并期望一切正常。 他想推广自己的功能-但测试失败并对他说: “您的实体实际上由于某种原因未经过审核。请对此问题进行调查”

有什么想法吗?咨询吗?

1 个答案:

答案 0 :(得分:1)

那些细微差别通常是由功能驱动的,并且试图编写一个通用解决方案来考虑所有这些非常细微的细微差别,即使不是不可能的事情也很容易出现问题。可以肯定的是,向应用程序引入新实体和功能的开发人员应该编写自己的单元和集成测试,并将其添加到应用程序的测试套件中。

我建议您退后一步,为开发人员提供一种方法,以通过帮助程序类来验证审计操作是否成功,该方法具有多种抽象化Envers内容的方法,仅要求他们对Envers有所了解。审计系统如何工作。