Java 没有公共字段的JPA继承
因此,我想实现遗留系统的现有DB结构,但存在一些问题 我有三个表: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
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数据库规范化意味着更少的样板文件,而是重建数据库