JAXB和JPA - 引用数据库中同一对象的两个XML文档

时间:2016-07-27 21:27:02

标签: java xml jpa jaxb

我正在使用JAXB和JPA创建一个存储/提供体育比赛结果的网络服务。 JAXB用于解组传入的XML文件,然后使用JPA将其结果存储在数据库中。在单个XML文件中,引用用于维护引用完整性,确保单个竞争对手仅存储在数据库中一次(所有相关引用都指向该竞争对手指向其在DB中的一条记录)。这一切都正常但是如果我然后提交另一个XML文档,其中包含第一个XML文档中存在的一些竞争对手,另外一个(重复,除了自动生成的ID之外)对数据库进行了输入,而我希望引用作为第一个XML文档的结果创建的原始条目。出于我目前的实施目的,“重复竞争者”由重复的姓氏,名字和国籍定义 - 我意识到这可能导致不正确的关联(例如,对于来自英国的称为John Smith的竞争者)但我可以忍受那些现在。

我很感激有人指出正确的方向来解决这个问题!

2 个答案:

答案 0 :(得分:0)

据我所知,你有JAXB解组的Java对象具有重复的值,因此JPA会触发重复的查询。

以下是一些解决方案:  1.在DAO层中有一个JPA特定的对象图,并将JAXB生成的java对象值复制到它。这将是更干净的设计,JPA和JAXB都可以在您的项目中进行更改,而无需更改其他项目。  2.在JAXB中使用重复删除选项,例如将所有传入的XML生成到单个包中,并避免出现警告。

答案 1 :(得分:0)

解决了我自己的问题 - 只需要几天就可以了......

在将对象持久保存到数据库的函数中,我现在正在进行查找以查看数据库中是否存在与我们的竞争对手的名字,姓氏和国籍相匹配的现有对象。重新开始,如果是这样,它将新对象替换为数据库中已有的对象,从而避免重复。