2017-02-15 68 views
2

我正在使用Spring引导,弹出JPA并且有以下问题:我创建了一些类“B”,它从JAR扩展了某些类“A” ,在类“B”上放上@Entity@Table注解(我不能在类“A”上做同样的事情),但是当Spring/Hibernate创建表时,只包含类“B”中的字段。即在数据库JPA注释将包含来自非实体超类的字段(来自JAR!)

+--------+        +--------+--------+ 
| fieldB | but I want this to be made | fieldA | fieldB | 
+--------+        +--------+--------+ 

创建

// some class from JAR 
// not an Entity 
class A { 
    String fieldA; 
} 

@Entity 
@Table(name = "B") 
class B extends A { 
    String fieldB; 
} 

表如何管理的?有没有可以放在B类上的JPA注解来解决这个问题?

编辑:如果@AttributeOverride注释的解决方案,如何来标记被覆盖的领域作为Id@Id注释不能在类外被放?

回答

0

您可以在吸气剂上设置@Id

@Entity 
@Table(name = "B") 
class B extends A { 
    String fieldB; 

    @Id 
    @Override 
    public String getFieldA() { 
     return super.getFieldA(); 
    } 
} 
+0

是的,我试过,但在这种情况下的问题是,我需要实施setter太,我想跳过。超类没有setter,因为它使用builder来安装它。 – milosdju

+0

这是真的.Builder-pattern和JPA不是最好的朋友。另外两个“解决方案”是映射这些值,并用反射(我知道......)从B构建setter。 – jklee

相关问题