弹簧数据JPA继承无法正常工作
这是我的班级。
@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 ... 我的猜测是解决我的问题,我可以更改人类的课程,以便不再是一张桌子,但是我真的不知道如何使我的米特格式表具有每个值的列。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
实体层次结构中不应有多个
@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)