首页 > 解决方案 > 如何使用 100 多个输入值插入忽略

问题描述

我正在学习 Java hibernate,找到了一个“插入忽略”的例子,

Query query = getSession().createSQLQuery("INSERT IGNORE INTO TABLA (ID, VAR) VALUES (:id, :var)");
UUID id = UUID.randomUUID();
query.setParameter("id", id);
String var = "abcde";
query.setParameter("var", var);
query.executeUpdate();

这将“插入忽略”1 个条目。我可能有 100+ var 作为输入,但只有 1 或 2 个不会出现在现有表中,我不知道哪些。

如果我使用循环设置 100 个值的参数,它可能会起作用。但有更好的可能吗?鉴于我可能只需要插入其中的 1 或 2 个。

或者我应该问这个:给定一个包含 100 个 var 字符串的列表,找出一些不在现有表中的字符串,而不使用循环。

标签: javamysqlhibernate

解决方案


您可以使用 MySQLON DUPLICATE KEY UPDATE功能。

例如:

INSERT INTO TABLA (ID, VAR) VALUES (1, 1), (2, 2), ... ON DUPLICATE KEY UPDATE ID=ID;

我不熟悉 java 或 hibernate,因此我的回答是原始查询。如果您需要帮助找出确切的语法, 这个问题可能是一个很好的资源。

而且,一般来说,ON DUPLICATE KEY UPDATE比后者更安全,INSERT IGNORE因为后者会忽略所有错误,而前者只会忽略重复插入。

希望这可以帮助!


推荐阅读