繁体   English   中英

SQL JPA - 多列作为主键

[英]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;
}
  1. @Entity类上使用@IdClass注释,然后在作为复合主键一部分的各个字段上使用@Id注释。
  2. 或者可以使用@Embeddable类,它可以包含复合主键的各个字段,然后该类的引用可以用作@Entity类中@Embedded注释的属性。 希望这可以帮助。

请注意,休眠的 Entity-Class-to-SQL-DDL-Script 生成器将对所有字段进行排序,并且无论它在定义中出现的顺序如何,都会在此排序中创建表定义和索引/约束定义字段的顺序。

虽然表定义中字段的出现顺序可能无关紧要,但复合索引中字段的顺序肯定很重要。 因此,您的关键字段必须命名,以便在按名称排序时它们符合您希望索引的顺序)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM