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

JPA/Hibernate-使用唯一约束作为主键

周培
2023-03-14

我有以下问题,我有一个已经存在的表,有三个字段field1,field2,field3。Field1实际上是另一个表的外键(@OneToOne)。所有字段2和字段3都可以为空,所以我不能为所有三个字段设置主键。在数据库中,field1 field2 field3有一个唯一约束。

field1 | field2 | field 3
 1     |   1    |   null
 1     |  null  |   2
 3     |   1    |   null

我用JPA/Hibernate尝试了几种解决方案,但没有找到一个好的。如果不定义@Id,JPA当然无法工作。在@EmbeddedId中定义@Embedded中的三个字段并将其与@EmbeddedId一起重用,会在所有三个不允许空值的字段上创建一个主键。

除了更改现有表并为每行添加自动生成的id之外,还有其他解决方案吗?

非常感谢

共有1个答案

卫焕
2023-03-14

你试过下面的方法吗?

@Table(
    name="xxx", 
    uniqueConstraints=
        @UniqueConstraint(name="my_unique_key", columnNames={"field1", "field2", "field3"})
)
 类似资料:
  • 在Jpa/Hibernate中,是否有任何方法可以在转到oracle db之前捕获运行时代码中要捕获的唯一约束。 场景:执行JPA批插入(我们在批处理中有一对多的父子关系),一些子表有两组唯一的约束 问题:当其中一个子表上的约束失败异常来自oracle时,我们无法跟踪批处理中的哪个约束失败了,为了解决这个问题,我们希望在代码中捕获它之前。

  • 问题内容: 如何在hibernatePOJO上实现我的唯一约束?假设数据库不包含任何内容。 我在注解中看到了唯一属性,但无法正常工作吗? 如果我想将此约束应用于多个列怎么办? 问题答案: 基本上,没有数据库支持就无法实现唯一约束。 和属性是架构生成工具生成相应约束的指令,它们本身并没有实现约束。 您可以在插入新实体之前进行某种手动检查,但是在这种情况下,您应该意识到并发事务可能存在的问题。 因此,

  • 问题内容: 我正在JPA中对userid列强制执行唯一性约束检查,这是对user表中的所有记录强制执行的。 我的要求是,特定组织内的用户ID必须唯一,而不是在所有组织中都唯一。 如何执行此类检查? 问题答案: 您可以为唯一约束指定多个字段,请尝试: 通过这样做,您的约束条件将检查userid和Organizationid的组合是否唯一。 最好的祝福,费边

  • 问题内容: 有没有一种方法可以使用JPA指定在不同的列集上应该有多个唯一约束? 我已经看到了特定于hibernate的注释,但是由于我们仍在确定hibernate和数据核之间的关系,因此我试图避免使用特定于供应商的解决方案。 问题答案: 所述的属性实际接受的这些阵列。您的示例只是具有单个元素的数组的简写。否则,它看起来像: 只要唯一性约束仅基于一个字段,就可以在该列上使用。

  • 问题内容: 我有一个MySQL表来保存标签(即像在Stack Overflow上使用的那些标签)。它仅具有一个id(pk)和一个标签列来保存标签本身。 我的Tag实体的带注释的get方法如下所示。 我在标签上使用了唯一的列约束,因为给定标签的行不应超过一行。但是,Hibernate似乎忽略了这一点,即我可以多次保存完全相同的标签,并且它只是创建一个新行而不是抛出异常。 我是否缺少某些东西,还是应该

  • 在现有答案中搜索没有给出有效结果。这就是我找不到原因的错误。我有一个实体类< code>MeteoRecord和< code>DayDegree,定义如下: 所有实体都扩展< code>AbstractEntity类: 保存新的如下所示: 它会引发错误: “气象仓库”只是扩展了“”JPA存储库: 我激活了更多日志以查看SQL查询,但没有看到创建新的其他查询,也没有在其他地方插入记录: 我错过了什么