0

JPA 継承に問題があります。データベースモデルも特別に構築されています。同じ属性を持ついくつかのテーブルが含まれており (テーブルは意図的に国ごとにカットされています)、これらのテーブルはすべて別のテーブルに接続されています (OneToOne)。

データ モデルの例を次に示します: usa_user、germany_user、austria_user。これらのテーブルはすべて同じ属性 (id、name、address) を持っています。これで住所も、usa_address、germany_address、austria_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目標は、 aで aを使用する方法を見つけること@MappedSuperclassです。

4

1 に答える 1