Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.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_Inheritance_Spring Data Jpa - Fatal编程技术网

Java 没有公共字段的JPA继承

Java 没有公共字段的JPA继承,java,jpa,inheritance,spring-data-jpa,Java,Jpa,Inheritance,Spring Data Jpa,因此,我想实现遗留系统的现有DB结构,但存在一些问题 我有三个表:A、B和CA包含指向B或C项的行nr。问题是B的主键是nr\u B,C的主键是nr\u C 我有一个spring boot应用程序,后面有一个postgres DB 这就是我所尝试的: @Entity class A { ... @Column(name="nr") private SuperBC item; ... } @MappedSuperClass abstract class Sup

因此,我想实现遗留系统的现有DB结构,但存在一些问题

我有三个表:
A
B
C

A
包含指向
B
C
项的行
nr
。问题是
B
的主键是
nr\u B
C
的主键是
nr\u C

我有一个spring boot应用程序,后面有一个postgres DB

这就是我所尝试的:

@Entity
class A {
    ...

    @Column(name="nr")
    private SuperBC item;

    ...
}

@MappedSuperClass
abstract class SuperBC {

    abstract Long getId();
    abstract void setId(Long id);
}

@Entity
class B extends SuperBC {

    @Id
    @Column(name = "nr_b")
    private Long id;

    ...
}

@Entity
class C extends SuperBC {

    @Id
    @Column(name = "nr_c")
    private Long id;

    ...
}
这不起作用,因为不能用
@MappedSuperClass
注释字段。 我还尝试将
@inheritation(strategy=InheritanceType.TABLE_PER_CLASS)
替换为
@MappedSuperclass
,但随后我还必须用
@Entity
注释
SuperBC
,并且我必须创建一个用
@Id
注释的字段,该字段在我的数据库中不存在

是否有一种方法可以在entityManager中手动编写
a
类的映射


谢谢大家

您可以为表
A
创建两个不同的视图,将它们映射为实体,并将它们用作关系实体。缺点是:您不能更新/插入它们,但可以存储分离的表实体。好主意,但这意味着有太多的样板代码,如果找不到其他可能性,我会这样做。但我想知道JPA是否能以任何方式做到这一点…:D数据库规范化意味着更少的样板文件,而是重建数据库