弹簧数据JPA继承无法正常工作

发布于 2025-02-03 20:37:27 字数 2864 浏览 1 评论 0 原文

这是我的班级。

@Entity
@Table(name = "Person")
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "PersonID")
    private Long personID;
    @Column(name = "Name")
    @Convert(converter = NameConverter.class)
    private Name name;
    @Column(name = "Geburtsdatum")
    private LocalDate geburtsdatum;
    @Column(name = "Strasse")
    private String strasse;
    @Column(name = "Hausnummer")
    private String hausnummer;
    @Column(name = "PLZ")
    private String plz;
    @Column(name = "Ort")
    private String ort;
    @Column(name = "EMail")
    private String email;
    @Column(name = "Telefonnummer")
    private String telefonnummer;

    protected Person() {}

    public Person(Name name, LocalDate geburtsdatum, String strasse, String hausnummer, String plz, String ort, String email, String telefonnummer) {
        this.name = name;
        this.geburtsdatum = geburtsdatum;
        this.strasse = strasse;
        this.hausnummer = hausnummer;
        this.plz = plz;
        this.ort = ort;
        this.email = email;
        this.telefonnummer = telefonnummer;
    }

    @Override
    public String toString() {
        return String.format("PersonID: %d\nName: %s\nGeburtsdatum: %s\nE-Mail: %s\nTelefonnummer: %s\nAdresse: %s %s, %s %s\n",personID,name.getFullName(),geburtsdatum,email,telefonnummer,strasse,hausnummer,plz,ort);
    }

    /* Getter & Setters */
}

这是我的班级班级,应该基于该人。

@Entity
@Table(name = "Mitglied")
public class Mitglied extends Person {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "MitgliedID")
    private Long mitgliedID;
    @Column(name = "ZPS")
    private String zps;
    @Column(name = "ZPSNummer")
    private String zpsNummer;
    @Column(name = "Eintrittsdatum")
    private LocalDate eintrittsDatum;
    @Column(name = "Austrittsdatum")
    private LocalDate austrittsDatum;
    @Column(name = "DWZ")
    private String dwz;
    @Column(name = "Elo")
    private String elo;
    @Column(name = "FIDETitel")
    private String fideTitel;

    protected Mitglied() {}

    public Mitglied(Name name, LocalDate geburtsdatum, String strasse, String hausnummer, String plz, String ort, String email, String telefonnummer, String zps, LocalDate eintrittsDatum, LocalDate austrittsDatum, String dwz, String elo, String fideTitel) {
        super(name, geburtsdatum, strasse, hausnummer, plz, ort, email, telefonnummer);
        this.zps = zps;
        this.eintrittsDatum = eintrittsDatum;
        this.austrittsDatum = austrittsDatum;
        this.dwz = dwz;
        this.elo = elo;
        this.fideTitel = fideTitel;
    }
    
    /* Getter & Setters */

}

我遇到的问题是,如果我从人那里继承了米特格,我比我有2个独特的ID ... 我的猜测是解决我的问题,我可以更改人类的课程,以便不再是一张桌子,但是我真的不知道如何使我的米特格式表具有每个值的列。

This is my person class.

@Entity
@Table(name = "Person")
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "PersonID")
    private Long personID;
    @Column(name = "Name")
    @Convert(converter = NameConverter.class)
    private Name name;
    @Column(name = "Geburtsdatum")
    private LocalDate geburtsdatum;
    @Column(name = "Strasse")
    private String strasse;
    @Column(name = "Hausnummer")
    private String hausnummer;
    @Column(name = "PLZ")
    private String plz;
    @Column(name = "Ort")
    private String ort;
    @Column(name = "EMail")
    private String email;
    @Column(name = "Telefonnummer")
    private String telefonnummer;

    protected Person() {}

    public Person(Name name, LocalDate geburtsdatum, String strasse, String hausnummer, String plz, String ort, String email, String telefonnummer) {
        this.name = name;
        this.geburtsdatum = geburtsdatum;
        this.strasse = strasse;
        this.hausnummer = hausnummer;
        this.plz = plz;
        this.ort = ort;
        this.email = email;
        this.telefonnummer = telefonnummer;
    }

    @Override
    public String toString() {
        return String.format("PersonID: %d\nName: %s\nGeburtsdatum: %s\nE-Mail: %s\nTelefonnummer: %s\nAdresse: %s %s, %s %s\n",personID,name.getFullName(),geburtsdatum,email,telefonnummer,strasse,hausnummer,plz,ort);
    }

    /* Getter & Setters */
}

This is my Mitglied class which should be based of the person.

@Entity
@Table(name = "Mitglied")
public class Mitglied extends Person {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "MitgliedID")
    private Long mitgliedID;
    @Column(name = "ZPS")
    private String zps;
    @Column(name = "ZPSNummer")
    private String zpsNummer;
    @Column(name = "Eintrittsdatum")
    private LocalDate eintrittsDatum;
    @Column(name = "Austrittsdatum")
    private LocalDate austrittsDatum;
    @Column(name = "DWZ")
    private String dwz;
    @Column(name = "Elo")
    private String elo;
    @Column(name = "FIDETitel")
    private String fideTitel;

    protected Mitglied() {}

    public Mitglied(Name name, LocalDate geburtsdatum, String strasse, String hausnummer, String plz, String ort, String email, String telefonnummer, String zps, LocalDate eintrittsDatum, LocalDate austrittsDatum, String dwz, String elo, String fideTitel) {
        super(name, geburtsdatum, strasse, hausnummer, plz, ort, email, telefonnummer);
        this.zps = zps;
        this.eintrittsDatum = eintrittsDatum;
        this.austrittsDatum = austrittsDatum;
        this.dwz = dwz;
        this.elo = elo;
        this.fideTitel = fideTitel;
    }
    
    /* Getter & Setters */

}

I'm having the problem that if the Mitglied inherits from the Person than i got 2 unique IDs...
My guess would be to fix my problem i could change the Person class so it would not be a table anymore, but i don't really know how i would make my Mitglied Table have a column for each value.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我也只是我 2025-02-10 20:37:27

实体层次结构中不应有多个 @id 列。这仅是合乎逻辑的,因为从本质上讲,他们描述了相同的对象,尽管有一些差异。

如果您的意图是 mitgliedid 值自动化的一个解决方案是使用Hibernate的 @generated / @valuegenerationType notations notations()。

另外,请查看此问题以获取其他实现相同结果的方法: Hibernate JPA序列(非ID) )

There shouldn't be multiple @Id columns in the entity hierarchy. It's only logical because essentially they describe the same object, although with some differences.

If your intention was to have mitgliedID value autogenerated one solution would be to use Hibernate's @Generated/@ValueGenerationType annotations (https://docs.jboss.org/hibernate/orm/6.0/topical/html_single/generated/GeneratedValues.html#generated-values-guide).

Also, check out this question for other ways to achieve the same result: Hibernate JPA Sequence (non-Id)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文