Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在子类(JPA)中创建复合主键_Java_Jpa - Fatal编程技术网

Java 在子类(JPA)中创建复合主键

Java 在子类(JPA)中创建复合主键,java,jpa,Java,Jpa,假设父类和子类之间存在以下情况: Class Parent { @Id @Column(name="product") Long product; //more fields. } Class Child extends Parent { @Column(name="type") String productType; @Column(name="version") int version; //more field

假设父类和子类之间存在以下情况:

Class Parent {
    @Id
    @Column(name="product")
    Long product;

    //more fields.
}

Class Child extends Parent {
    @Column(name="type")
    String productType;

    @Column(name="version")
    int version;

    //more fields.
}

即使子类扩展了已经有主键的父类,子类中是否可能有复合主键?

简短的回答是否。在JPA中,您不能重新定义主键。如果父类有@ID注释,则无论继承策略如何,子类都不允许@ID注释


较长的答案是,如果需要这样做,应该重新考虑对象映射和继承策略。如果你的父母已经有了一组唯一可识别的字段,为什么你要找一个打破这个惯例的孩子呢?即使你成功了,在架构和代码清晰性方面,这对你来说是安全的吗?

可能取决于继承策略,基本上对于你的用例,你至少需要每个类
策略,因为一个表不能有两个主键,我不知道除此之外你还需要什么,您是否尝试过继承(strategy=InheritanceType.TABLE\u PER\u CLASS)
,然后在子级中设置不同的
@Id
(注意:对于效率而言,每个类的表可能不是最好的)如果你描述你的真正目标,比如什么是
父母
孩子
,为什么你需要孩子有不同的主键,也许我们可以引导你进入一个更好的领域solution@niceman谢谢你的及时回复。我没有尝试过策略
@heritance(strategy=heritancetype.TABLE\u PER\u CLASS)
。我会调查的。谢谢,谢谢你的及时回复。我将重新考虑对象映射和继承策略。