微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

春季-JPA在抽象类中加入抽象类

如何解决春季-JPA在抽象类中加入抽象类

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

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

现在我不知道或存在长时间正确映射它们的问题。我有以下内容

// 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,...
@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

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?