Hibernate Spring数据jpa创建或更新

Hibernate Spring数据jpa创建或更新,hibernate,jpa,spring-data-jpa,Hibernate,Jpa,Spring Data Jpa,在我正在开发的Web服务器中,我们接收来自用户客户端的请求,然后Web服务器从另一台服务器请求一些资源,并将该资源返回给客户端。从其他web服务器返回结果后,我们希望将数据库与从其他web服务器返回的记录同步。我想知道是否有任何方法可以不用选择然后更新就可以做到这一点 例如,我们从另一个Web服务器获得Resource{id=null,uniqueField=valWontChange,field1=val,field2=val2},而在我们的数据库中,我们拥有Resource{id=1,uni

在我正在开发的Web服务器中,我们接收来自用户客户端的请求,然后Web服务器从另一台服务器请求一些资源,并将该资源返回给客户端。从其他web服务器返回结果后,我们希望将数据库与从其他web服务器返回的记录同步。我想知道是否有任何方法可以不用选择然后更新就可以做到这一点

例如,我们从另一个Web服务器获得
Resource{id=null,uniqueField=valWontChange,field1=val,field2=val2}
,而在我们的数据库中,我们拥有
Resource{id=1,uniqueField=valWontChange,field1=oldVal,field2=val2}
。我宁愿不做这样的事

Resource resDb=repo.getByUniqueField(res.uniqueField);
如果(resDb!=null){
res.id=resDb.id;
}
回购保存(res);
我可以使用类似于:

修改 @查询(“更新资源r集合field1=?1,field2=?2,其中r.uniqueField=?3”) 布尔更新WhereUniqueField(对象字段1、对象字段2、对象uniqueField); void createOrUpdate(资源资源资源){ 布尔更新=更新WhereUniqueField(res.field1、res.field2、res.uniqueField); 如果(!已更新){ 保存(res); } }
如果一个资源有很多字段,我认为这是不可取的,我必须将所有字段分别传递给该方法。有没有更好的办法?如果没有,是否有人对上述方法有经验,并且他们是否知道在实体可以有相当多的字段的情况下,哪个选项会更好?

另一种选择是在许多数据库目前支持的
@Query
中使用a。它的好处是在一次往返中得到处理


对于JPA更新和SQL合并,您可以使用它,以便将实体用作单个参数

为什么不使用本机查询?根据需要更新的字段动态创建本机查询。+1尽管看起来mysql(我正在使用)不支持合并语句。我想我可以在重复密钥更新中使用
,但这有其自身的局限性。谢谢你提供的信息,我将进一步了解。