[英]SQL JPA - Multiple columns as primary key
如果我想要严重的 Column 来组成一个 ID。
SQL 示例:
CONSTRAINT [PK_NAME] PRIMARY KEY ([Column1],[Column2],[Column3])
我怎么能用 Jpa Entity 类做到这一点? 通过列定义?
只需将 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_
如果类中的所有字段都是主键的一部分,那么解决方案将非常简单(扩展@ raul-cuth提供的解决方案):
@Entity
@IdClass(EntityExample.class)
public class EntityExample implements Serializable {
@Id
private int column1;
@Id
private int column2;
@Id
private int column3;
}
@Entity
类上使用@IdClass
注释,然后在作为复合主键一部分的各个字段上使用@Id
注释。 @Embeddable
类,它可以包含复合主键的各个字段,然后该类的引用可以用作@Entity
类中@Embedded
注释的属性。 希望这可以帮助。 请注意,休眠的 Entity-Class-to-SQL-DDL-Script 生成器将对所有字段进行排序,并且无论它在定义中出现的顺序如何,都会在此排序中创建表定义和索引/约束定义字段的顺序。
虽然表定义中字段的出现顺序可能无关紧要,但复合索引中字段的顺序肯定很重要。 因此,您的关键字段必须命名,以便在按名称排序时它们符合您希望索引的顺序)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.