【问题标题】:Saving elements of a collection in a database only if they don't exist仅当集合的元素不存在时才将它们保存在数据库中
【发布时间】:2020-08-04 13:38:34
【问题描述】:

我有一个对象集合 (id-type1-type2),如果它们不存在,我必须将它们保存在数据库中。

type1-type2 组合在数据库中必须是 UNIQUE (数据库中针对此组合存在唯一约束)。我的问题是:如何在我的集合中保存数据(可以是数千个对象)而不会出现 SQL 异常(由于唯一约束)而不在保存之前检查集合中的每条记录是否存在于数据库中?这甚至可能吗?

我是否必须迭代集合,检查每条记录的存在(每次检查一个数据库调用),然后保存所有不存在的记录? 有没有更好的方法来减少往返行程?也许我可以获取所有记录,用我的集合(两个集合中都存在的那些)过滤它们,然后只保留新的。在这种情况下,我进行了 2 个数据库调用。但是,在这种情况下,我担心内存。

我正在使用 Java 和 Spring,但这是一个普遍的问题。 提前致谢。

【问题讨论】:

    标签: java mysql spring database persistence


    【解决方案1】:

    你需要彻底。如果您将 UniqueKeyConstraint 与组合键 (Field1-Field2) 一起使用,则数据库本身将为您完成这项工作。

    【讨论】:

    • 是的,我正在为数据库使用 UniqueKeyConstraint。但是,数据库似乎对我不起作用。我的意思是,它可以防止添加重复组合的记录,但会引发异常。我想毫无例外地保留记录
    • 在应用 UniqueKeyConstraint 之前确保您的表是空的。稍后添加(即,当您的表中已有行时)将无效。
    猜你喜欢
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    相关资源
    最近更新 更多