JPA注释将包括来自非实体超类(来自JAR!)的字段
我正在使用spring boot、spring JPA,但有以下问题:我创建了一些类“B”,它从JAR扩展了一些类“A”,在类“B”上添加了JPA注释将包括来自非实体超类(来自JAR!)的字段,jpa,inheritance,spring-boot,Jpa,Inheritance,Spring Boot,我正在使用spring boot、spring JPA,但有以下问题:我创建了一些类“B”,它从JAR扩展了一些类“A”,在类“B”上添加了@Entity和@Table注释(在类“A”上我不能做同样的事情),但当spring/Hibernate创建表时,只包含来自类“B”的字段 // some class from JAR // not an Entity class A { String fieldA; } @Entity @Table(name = "B") class B e
@Entity
和@Table
注释(在类“A”上我不能做同样的事情),但当spring/Hibernate创建表时,只包含来自类“B”的字段
// some class from JAR
// not an Entity
class A {
String fieldA;
}
@Entity
@Table(name = "B")
class B extends A {
String fieldB;
}
在数据库中创建的表
+--------+ +--------+--------+
| fieldB | but I want this to be made | fieldA | fieldB |
+--------+ +--------+--------+
如何管理?是否有一些JPA注释可以放在B类上解决这个问题
编辑:如果
@AttributeOverride
注释是解决方案,当@Id
注释不能放在类外时,如何将覆盖的字段标记为Id
您可以在getter上设置@Id
@Entity
@Table(name = "B")
class B extends A {
String fieldB;
@Id
@Override
public String getFieldA() {
return super.getFieldA();
}
}
是的,我试过了,但在这种情况下的问题是,我也需要实现setter,我想跳过的。超类是没有setter的,因为它使用builder来稳定它。没错。builder-pattern和JPA不是最好的朋友。另外两个“解决方案”是映射值,并使用反射从B构建setter(我知道…)。