关于解决JPA持久性问题的建议

时间:2014-06-27 10:23:48

标签: java jpa persistence foreign-key-relationship

我正在建立一个持久性测试人员。该项目负责创建和填充(使用随机值)我可能拥有的任何其他对象。对象(obj1)保存在DB中,然后从中读取并存储(obj2),然后我将它们进行比较(obj1 == obj2)。测试数据是否正确保留。 (到目前为止,对于简单的对象,这已经有效了)

但是,由于我用随机值填充所有对象,我遇到了问题,因为id是随机的...... 这使得无法坚持下去,因为FK并不对应任何id。

为了解决这个问题,我正在考虑为每个对象构建一个Factory(并且有很多对象)并保存id以便稍后,当持久化时我可以获得id值并使用它因此。但是我不能保证这会有效,你们这么认为吗?

你们有这种问题吗?你是怎么解决的?你有什么其他的建议?非常感谢他们。

由于

1 个答案:

答案 0 :(得分:0)

TL; DR:作为第一种方法,我将处理您需要将数据符合的任何依赖性约束的文本描述,以符合测试脚本或脚本驱动数据。然后按所需顺序生成数据。

A"测试"似乎是一个示例持久性api客户端:它具有基于某种语言的声明的运行时状态,您可以在其中调用持久性api;它模拟典型客户端的多个持久性调用。典型的api客户端的这种运行时状态可能涉及对象之间的任何类型的依赖性。由于您实际上是指FK,可能是您模拟的客户至少有部分州与ORM有关。

那些ORM声明涉及FK和其他约束。您可能拥有相同信息的另一个描述,例如数据库DDL或数据库运行时元数据,这些信息由生成或生成这些声明。也许这样的信息实际上是持久性api的一部分。你没有说清楚。信息的DBMS表单更可能显示依赖关系。

处理声明或DDL或元数据查询输出文本以提取相关的声明部分。例如awk,sed,grep。生成依赖图,其中节点是对象类+字段对,有向边是依赖类+字段对。 (FK是类+字段集到类+字段集,但键可能重叠,因此依赖单元是字段。)查找这些的部分排序。您可以将边放在数据库表中并执行传递闭包和/或部分排序查询。或者你可以找到一个库来做到这一点。 (例如JGraphT库。)声明可能已经要求按此顺序排列。按依赖性增加的顺序生成数据。您可能会重复生成依赖对象组,然后重新开始。当然,这应该都是自动化的。

(更一般地说:在形成表示有序列表的树的一组对象的ORM表中,存在从NEXT字段到OID字段的FK。但这只是整体约束的一小部分(称为表示不变量)如果你按照所有NEXT引用它们形成一个树!也许是一个排序或平衡的!当走路时产生一个有序列表!构建树的调用描述的那个!大概你的持久性测试器要求陈述你的测试客户端数据/对象/状态应具有的那些属性。也许它只是ORMish的东西。例如PK,UNIQUE,FKs,通过:。也许它只是FK。)

(一定要设置你的测试项目,以便你可以对api和测试人员进行回归测试。例如存储种子。虽然你可能无法存储所有示例生成的数据,但你可以检查它和部分之类的表格,以便您可以检查它可能与以前的时间相同。)

(注意随机测试数据。了解预期的输入 - 输出关系。我使用随机测试数据参与了一个包含数百万美元错误(不是我的!)的项目。)