日期:2014-05-16  浏览次数:20421 次

用Json导测试数据所出现的问题
用Json导测试数据有一些好处(The Pesistence is Hibernate):
1. 可以让测试人员,或开发人员造数据是远离数据库(面向对象造数据)。
2. 数据库更换或移植,数据可以完好的保存在json文件里(因为是json文件,也可以将数据库的data反导出到文件)。数据也容易备份转移。
   ...

那么也会存在一些问题。

现在假设一个数据库的表跟Domain Object已经对应好。 (数据库是postgre, Hibernate3.2,and jpa.)

假设有这么一个数据,Category(super class, or not, but has parent, and children), 下面有GroupCategory, MagazineCategory继承它。 而annotion其中一语句是
"@Inheritance(strategy = InheritanceType.SINGLE_TABLE)"
那么,数据库中只有一张表tcategory,而对应有两个class, GroupCategory, MagazineCategory(表中的dtype字段来区分),问题来了:
如何添加parent?

一次添加parent数据和它的children时会抛出异常。原因推理: 假设这里导一个json一个transaction, 那么在假设导GroupCategory时,会将parent预备导入,但还没真正的persist, 那么再导入其children时,在数据库里没找到,那么会自己建一个parent, 也想往数据库储存,冲突! 所以会异常抛出?

如何解决:
在导入数据时先导入数据,然后导入关系(只是针对这种特殊情况,其他的domain object不需要要)。
eg:先导入所有GroupCategory(include parents and children, but no relatino)。如GroupCategory.json
然后在导入relation,如:GroupCategoryRelation.json,这里面建立关系:)

昨天弄到凌晨三点,在高手的指点下解决问题,多谢andlu!
但依然麻烦:D