当前位置: 首页 > 知识库问答 >
问题:

具有唯一密钥的onDuplicateKey的Jooq代码

罗晨
2023-03-14

我正在使用Postgres,我有一个具有唯一键(memberId,propertyName)的表。我使用的是onDuplicateKey,生成的代码显示它使用的是on conflict,但它使用的是id。是否可以指定您自己的键来检查,或者Jooq是否尝试读取表并检查是否存在唯一约束?我目前的解决方法是先进行选择,然后进行更新或插入。

共有1个答案

萧明贤
2023-03-14

ON DUPLICATE KEY语法源自MySQL,其中子句的语义学是考虑表上的所有唯一约束(包括主键),而不仅仅是您关心的约束。

但是,当您以PostgreSQL为目标时,为什么首先使用这种语法呢?jOOQ支持PostgreSQL的ON CONFLICT,它允许指定对子句使用哪个唯一键。

 类似资料:
  • 我已经更改了数据库,以便为所有条目提供唯一的密钥。 我是斯佩萨。班 这段代码工作正常,直到我有了没有唯一密钥的“旧”数据库。现在我不得不面对这些陈述: 问题是我不知道如何有一个指向键的参考。特别是,变量“选项”不是“Spesa”类,但它是null。如果我没有适配器,我会做为(Datasnapshot ds: datasSnapshot.get儿童),然后进入为我将使用getValue,但在这种情况

  • 问题内容: 我有一个字段,例如,在表中应该是唯一的。 使用Spring / Hibernate验证进行验证的最佳方法是什么? 问题答案: 一种可能的解决方案是创建自定义约束(和相应的验证器)。并要查找数据库中的现有记录,请提供(或Hibernate)to 的实例。 EntityManagerAwareValidator ConstraintValidatorFactoryImpl 唯一键 Uniq

  • 昨天我在我的项目中添加了,现在当我离开并回到导航中的元素时,它会重新加载Sky,我得到 警告:儿童(…):遇到两个具有相同密钥的子项,。子密钥必须是唯一的;当两个子项共享密钥时,将只使用第一个子项。 (上面使用的数字50只是一个例子,它每次抛出这个错误~40次,都是不同的id) 这个问题似乎源于我的文件: 因为每次我进入另一个屏幕时,这个组件都会卸载,然后在我回来时重新安装。 当完成时,创建了一组

  • 我有一个mysql数据库,它的表既有一个自动递增的主键,也有一个唯一的字符串值键(sha-1散列)。 如果我尝试添加一个与现有记录具有相同sha-1哈希的记录,我只想获取现有记录的主键。我可以使用“在重复密钥更新时插入…”或“插入忽略”之类的方法来防止在尝试插入具有现有哈希值的记录时出现异常。 但是,当这种情况发生时,我需要检索现有记录的主键。我找不到用一条SQL语句来实现这一点的方法。如果重要的

  • 问题内容: 这个问题需要一些假设的背景。让我们考虑一个有列的表,,,,使用MySQL作为RDBMS。由于如果给定的某个人的名字和出生日期与另一个人相同,那么根据定义,他们就是同一个人(除非有两个巧合,即我们两个人分别于1809年2月12日出生,他们叫亚伯拉罕·林肯),所以我们将上的唯一键,这意味着“不要将同一个人存储两次”。现在考虑以下数据: 如果现在尝试运行以下语句,则该语句应该并且将失败: 如

  • 问题内容: 我有一个字段,例如,在表中应该是唯一的。 使用Spring / Hibernate验证进行验证的最佳方法是什么? 问题答案: 一种可能的解决方案是创建自定义约束(和相应的验证器)。并在数据库中查找现有记录,请提供(或Hibernate )to 的实例。 EntityManagerAwareValidator ConstraintValidatorFactoryImpl 唯一键 Uniq