如何基于Java对象的两个或多个字段为hibernate生成唯一的Id?

时间:2016-11-18 07:37:49

标签: java hibernate

Java类有两个3个字段:name,roll no和age。在sql表中,不能有两个具有相同名称和卷号以及不同年龄的条目。那么,在保存时,通过saveOrUpdate,id应该映射到两个字符串?有效的方法是什么?

1 个答案:

答案 0 :(得分:4)

这里有两种选择。第一个是使用@IdClass,因此您将两个字段标记为@Id,并使用@IdClass(ClassId.class)标记,ClassId是一个包含两个pk字段的类。 Here你有一个例子。

另一种选择是使用@Embeddable@EmbeddedIdHere你也有一个例子。

虽然它们相似,但两者之间存在一些差异。在@IdClass的情况下,您将此类用于findOne(ID id),依此类推,但您的原始类(具有3个字段的类)不包含它,因为它只包含表示实际列的字段( 3个字段:name,rollNo和age)。对于@EmbeddedId,您的原始类包含一个字段,该字段具有表示id字段的类,而不是表示这些列的字段(2个字段:IdClass,age)。当您使用HQL时,这很重要,因为您以不同方式访问字段。请检查the validated answer here,因为它会更详细地解释这两个选项。