【发布时间】:2015-12-11 07:24:55
【问题描述】:
我将应用程序启动时EntityManager.getMetamodel 返回的javax.persistence.metamodel.Metamodel 对象与我在每次应用程序关闭时使用XMLEncoder 存储到文件中的持久实例进行比较。目的是检测类的变化(这将导致不同的Metamodels)。目的是警告用户持久性可能会失败,因为需要修改或重新生成架构。
鉴于以下事实,我如何在集成测试中模拟这种变化:
- 类加载不支持将类 X 加载为类 Y,因此我需要在不同的项目中定义两个类。那会让我依赖构建工具(例如
maven) - 反射不允许删除类字段和方法
我正在寻找一种可移植的,即跨 JPA 提供程序的解决方案,即 hibernate 的 hibernate.hbm2ddl.auto 不是一个选项。
我在带有 Linux 4.3 的 Ubuntu 15.10 上使用带有 JPA 2.1 的 Java 7。
【问题讨论】:
-
我想知道,你的真正目标是什么? “在应用程序开始时” - 我是否理解得很好,您在每个应用程序开始之前都在重复测试?只检查数据库中的一些版本字段不是更容易吗?你想检查这两个 - 字段添加到数据库中,但不在类中(未映射)或仅以其他方式?
-
检查这个答案 - stackoverflow.com/a/2116653/384674
-
@Betlista 也许检查版本字段更容易。我仍然需要在我的集成测试中生成一个类被更改的情况,这就是我的问题所在。我可以更改数据库中的版本字段,但这会在它中作弊。除了检测数据库中类的更改之外,我不想检查任何其他内容。背景是我希望第三方也能够提供实体模型。我在问题中添加了关于
hibernate.hbm2ddl.auto的注释。好电话,不过,谢谢。