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_
- 在
@Entity
类上使用@IdClass
注释,然后在作为复合主键一部分的各个字段上使用@Id
注释。 - 或者可以使用
@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; }