首页 > 解决方案 > 实体类在使用@IdClass 时扩展它自己的 PK 类

问题描述

我正在尝试使用复合主键为我的数据库实体高效/优化地创建 Java 类。使用@IdClass时,我在网上找到的每个教程都创建了一个实体类和一个完全独立的PK类,其中两个类都包含与复合主键对应的字段。例如:

public class MyEntityPK implements Serializable {

    private String primaryFirst;

    private String primarySecond;

    // ...

}

@Entity
@IdClass(MyEntityPK.class)
public class MyEntity {

    @Id
    private String primaryFirst;

    @Id
    private String primarySecond;

    private String otherField;

    // ...
}

我很好奇为什么,与定义主键字段两次相反,我们不只是执行以下操作:

@MappedSuperClass
@IdClass(MyEntityPK.class)
public class MyEntityPK implements Serializable {

    @Id
    protected String primaryFirst;

    @Id
    protected String primarySecond;

    // ...

}

@Entity
@IdClass(MyEntityPK.class)
public class MyEntity extends MyEntityPK {

    private String otherField;

    // ...
}

这种方法是否存在我遗漏的任何陷阱、问题或不合规问题?

标签: javajpahibernate-mappingcomposite-primary-key

解决方案


推荐阅读