我正在使用Spring和JPA。
为了保存和更新记录,有一个保存CrudRepository的方法。
我使用生成的长id作为记录的主键。
现在我需要更新一个已经存在的记录。如果主键id与数据库中已经存在的值不匹配,复制异常将失败。如果没有给出id,JPA将假设插入,这将失败,因为旧记录已经存在。
那么,最好的策略是什么呢?
在进行保存以更新我的记录之前,我不想查找现有记录的id。
id是否有一些默认值,用于将其标记为update而不是insert?
发布于 2022-06-13 19:15:47
我不认为Hibernate有这样的功能。有些数据库的本地功能(insert ignore in MySQL或Postgres中的on conflict do nothing )支持这一点,但是您必须自己编写SQL。而且有些数据库根本没有这个功能。
可能,使用Hibernate的唯一方法是处理约束冲突异常。注意,如果发生这种情况,您可能无法继续处理事务/会话,因为Hibernate警告您,如果会话/EntityManager引发异常,就无法进一步可靠地使用它。
https://stackoverflow.com/questions/72607864
复制相似问题