【问题标题】:JPA annotation that will include fields from non-entity super class (from JAR!)JPA 注释将包含来自非实体超类的字段(来自 JAR!)
【发布时间】:2017-02-15 13:55:48
【问题描述】:

我正在使用 spring boot、spring JPA 并遇到以下问题:我创建了一些类“B”,它从 JAR 扩展了一些类“A”,将 @Entity@Table 注释放在类“B”上(我不能在“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

【问题讨论】:

    标签: jpa inheritance spring-boot


    【解决方案1】:

    您可以在 getter 上设置 @Id

    @Entity
    @Table(name = "B")
    class B extends A {
        String fieldB;
    
        @Id
        @Override
        public String getFieldA() {
            return super.getFieldA();
        }
    }
    

    【讨论】:

    • 是的,我试过了,但在这种情况下的问题是我也需要实现 setter,我想跳过。超类没有设置器,因为它使用构建器来实例化它。
    • 确实如此。Builder-pattern 和 JPA 不是最好的朋友。另外两个“解决方案”正在映射值并使用反射从 B 构建设置器(我知道...)。
    猜你喜欢
    • 1970-01-01
    • 2010-10-20
    • 2021-11-10
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 2022-12-31
    相关资源
    最近更新 更多