【问题标题】:Spring - JPA join abstract class in abstract classSpring - JPA 在抽象类中加入抽象类
【发布时间】:2020-10-18 20:12:23
【问题描述】:

我对 JPA 继承有疑问。数据库模型也是专门搭建的。它包含多个具有相同属性的表(这些表是按国家/地区故意切割的),并且所有这些表都连接到另一个表 (OneToOne)。

以下是数据模型的示例: 美国用户、德国用户、奥地利用户。所有这些表都具有相同的属性(id、name、address)。现在地址也是根据国家建立的,例如美国地址、德国地址、奥地利地址。

现在我不知道或有问题,我已经正确映射它们很长时间了。我有以下内容:

// All Lombok Getter, Setter Args,...
@MappedSuperclass
public abstract Address {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @JsonIgnore
    private Long id;


    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "user_id", referencedColumnName = "id")
    @JsonIgnore
    private User user;

    private String name;
    private String addr_num;
    
    ...
}

// All Lombok Getter, Setter Args,...
@MappedSuperclass
public abstract User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @JsonIgnore
    private Long id;


    @OneToOne(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = false)
    @JsonIgnore
    private Address address;

    private String name;

}

@Entity
@Table(name = "usa_user")
public class UsaUser extends User {}

@Entity
@Table(name = "austria_user")
public class AustriaUser extends User {}

@Entity
@Table(name = "germany_user")
public class GermanyUser extends User {}


@Entity
@Table(name = "usa_address")
public class UsaAddress extends Address {}

@Entity
@Table(name = "austria_address")
public class AustriaAddress extends Address {}

@Entity
@Table(name = "germany_address")
public class GermanyAddress extends Address {}


但不幸的是,这不起作用。每次我启动它时,JPA 都会注意到它无法映射实体地址 - 用户(这是可以理解的,因为它们不是实体而是抽象类)。解决这个问题的最佳方法是什么?我想避免我必须列出所有这些实体中的属性,因为这将是多余的。

目标是找出如何在@MappedSuperclass 中使用@MappedSuperclass

【问题讨论】:

    标签: spring hibernate jpa abstract mappedsuperclass


    【解决方案1】:

    MappedSuperclass 不可查询,因此也不可连接。您需要将其映射为具有每个类继承策略的表的抽象实体。只需在地址和用户上切换到@Entity 并添加@Inheritance(TABLE_PER_CLASS)

    【讨论】:

      猜你喜欢
      • 2012-04-16
      • 1970-01-01
      • 2016-03-12
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      相关资源
      最近更新 更多