Ich benutze JPA Hibernate/Spring Boot, um einen Webserver mit MySQL-Datenbank zu erstellen, und ich versuche, eine POJO-Entität zu erweitern, die so aussieht zusätzliche OneToMany-Listen.JPA Hibernate :: Vererbung einer Entität mit zusätzlichen OneToMany-Listen
@Entity
@Table(name="user")
public class User {
@Id
@GeneratedValue
private Integer id;
@Column(nullable=false)
private String name;
....Constructors, getters and setters....
}
Mit dieser grundlegenden Benutzereinheit möchte ich nur eine UserInfo-Entität mit zusätzlichen Informationen über die Karriere des Benutzers erstellen.
@Entity
public class UserInfo extends User {
@OneToMany(cascade= CascadeType.ALL, fetch= FetchType.EAGER)
@JoinColumn(name="user_id", referencedColumnName = "id")
private List<Career> careers;
....Constructors, getters, setters......
}
Und ich bin ziemlich verwirrt, welche Vererbungsstrategie ich wählen sollte. Ich denke nicht, dass es notwendig ist, dafür eine andere Spalte oder Tabelle zu erstellen. Oder sollte ich nur zweimal abfragen ..?
Ich bin irgendwie neu zu JPA so nicht sicher, welche als die beste Praxis oder Design angesehen wird ..
bearbeiten:
Dies ist, wie Karriere Unternehmen aussieht. Nur für den Fall ..
@Entity
@Table(name="career")
public class Career {
@Id
@GeneratedValue
private Integer id;
@Column(nullable=false)
private Integer user_id;
@Column(nullable=false)
private String name;
@Column(nullable=false)
private String description;
....Constructors, getters and setters....
}
Seit Benutzertabelle erstreckt bedeutungslos war (nur in meinem Fall), änderte ich die User
Klasse wie folgt.
@Table(name="user")
public class User {
@Id
@GeneratedValue
private Integer id;
@Column(nullable=false)
private String name;
@OneToMany(fetch= FetchType.LAZY)
@JoinColumn(name="user_id", referencedColumnName = "id")
private List<Career> careers;
....Constructors, getters, setters......
}
Jetzt versuche ich dies mit Spring Data JPA, und wenn ich versuche, um die Liste der Benutzer mit ihrer Karriere zu zeigen, ist es nun mehr als 40-mal etwa eine Minute Abfrage unter dem Ergebnis zu zeigen.
Ist das das N + 1 Problem ..? Wie kann ich das lösen?
Sie verwenden derzeit die Zuordnung, indem Sie @OnetoMany über Ihr Careers-Element in der UserInfo-Klasse definieren. user_id sollte in User-Tabelle für die Zuordnung mit ID-Spalte der Career-Tabelle vorhanden sein. Ich sehe keine Notwendigkeit der Vererbungsstrategie (Es ist meine Ansicht obwohl) –