SQL JPA – 多列作为主键

如果我想要一个严格的列来组成一个ID。

SQL示例:

CONSTRAINT [PK_NAME] PRIMARY KEY ([Column1],[Column2],[Column3]) 

我怎么能用Jpa Entity类做到这一点? 通过columndefinition?

只需将id字段设置为:

 value = Column1 + Column2 + Column3 // aint working. 

您需要为复合键创建一个类:

 public class CompositeKey implements Serializable { private int column1; private int column2; private int column3; } 

然后在你的实体类中使用@IdClass注释:

 @Entity @IdClass(CompositeKey.class) public class EntityExample { @Id private int column1; @Id private int column2; @Id private int column3; ... ... } 

我认为这应该有效。 希望它有所帮助,欢呼!

是的,还有另一个解决方案,@ jklee提到的解决方案,两者都有效,这是一个偏好问题。

使用@Embeddable@EmbeddedId

例:

 @Entity public class Project { @EmbeddedId ProjectId id; : } @Embeddable Class ProjectId { int departmentId; long projectId; } 

更多信息请访问http://www.objectdb.com/java/jpa/entity/id#Embedded_Primary_Key_

  1. @Entity类上使用@IdClass注释,然后在作为复合主键一部分的各个字段上使用@Id注释。
  2. 或者可以使用@Embeddable类,它可以包含复合主键的各个字段,然后该类的引用可以用作@Entity类中具有@Embedded注释的属性。 希望这可以帮助。

如果类中的所有字段都是主键的一部分,那么解决方案将非常简单(扩展@ raul-cuth提供的解决方案):

 @Entity @IdClass(EntityExample.class) public class EntityExample implements Serializable { @Id private int column1; @Id private int column2; @Id private int column3; }