当前位置: 首页 > 面试题库 >

如何使用Hibernate获取两个字段的唯一密钥?

东门宜
2023-03-14
问题内容

我有一个实体类的两个字段,我不希望它们是唯一的,而是用作本身必须是唯一的键的复合字段。例如,我有两个字段(名称和版本),这些字段对于其他记录可以相同,但它们必须唯一。使用Hibernate(带有注释)做到这一点的最佳方法是什么?我正在将Hibernate
Validator用于其他字段,但不确定如何使用该方法来验证两个字段一起组成唯一键。我正在使用具有id泛型类型的泛型实体类,可以将其替换为复合键类,但是我还没有使它很好地工作。


问题答案:

这将在数​​据库上创建一个唯一键:

@Table( name = "MYTABLE",
        uniqueConstraints = { @UniqueConstraint( columnNames = { "NAME", "VERSION" } ) } )

这将由数据库在更新时强制执行或保留。

如果要使用Hibernate Validator强制执行此操作,则需要编写自己的自定义验证程序。



 类似资料:
  • 问题内容: 我有两个表和相关的Java映射。 这是我的Java实体。国家POJO: 和用户POJO: 问题是,我怎么能加入到在Hibernate中使用注释?当我使用Hibernate创建User对象时,我需要自动绑定这两个字段(代码和countryCode)。 问题答案: 您需要从映射到实体,并从映射到:

  • 问题内容: 有没有一种方法可以将几个字段定义为Django中唯一的字段? 我有一张(期刊的)卷表,而我不希望同一期刊有一个以上的卷号。 我试图将属性放在字段中但是它不起作用。 问题答案: 有一个简单的解决方案称为unique_together,它可以完全满足你的要求。 例如: 在你的情况下:

  • 问题内容: 我需要一个Java实现,它忽略类中字段的顺序。首先,节点可以是第二个节点,第二个可以是节点优先。 这是我的方法取决于顺序: 有没有一种方法可以计算出以下边缘相同但唯一的哈希值? 应该是。 问题答案: 您可以使用某种交换运算来代替现在的运算,例如加法: 我建议您仍然使用乘数,因为它为哈希码提供了一些熵。在这里查看我的回答: 遵循一些良好的哈希规则是: 混淆您的运营商。通过混合您的运算符,

  • 比如说,我有一个名为“Contact”的表,其中“first\u name”和“last\u name”作为列。基本上,“从联系人c中选择concat(c.firstname,,,c.lastname)作为全名”是我在hibernate中想要做的。 我可以将整个查询放在createQuery中,并获得所需的输出。但是,我不想在hibernate中执行sql查询。我在这里找到了一篇类似的帖子“我们可

  • 我知道,如果我尝试使用JPA插入一个记录,如果它违反了唯一约束,它会抛出一个异常,其中包含cause MysqlintegrityConstraintViolationException(原因MysqlintegrityConstraintViolationException)。 我想向用户显示用户友好的消息。因此我想获得发生违规的字段名。我可以使用cause获得消息,它给消息提供类似于密钥'do

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