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

最佳答案

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

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

尽管它们相似,但两者之间还是有一些区别。在@IdClass的情况下,可以将此类用于findOne(ID id),依此类推,但是您的原始类(具有3个字段的类)不包含该类,因为它仅包含代表真实列的字段( 3个字段:名称,rollNo和年龄)。对于@EmbeddedId,您的原始类包含一个字段,其中的类表示id字段,而不是表示那些列的字段(2个字段:IdClass,age)。当您使用HQL时,这一点很重要,因为您访问字段的方式有所不同。选中the validated answer here,因为它会更详细地说明这两个选项。

07-24 09:49
查看更多