ma question est très similaire à Changing the type of an entity preserving its ID, mais j'utilise plutôt InheritanceType.JOINED au lieu de Table_per_class. Cela signifie que je ne dois pas changer de table, juste pour créer une nouvelle sous-classe, avec le même identifiant que la superclasse. Pour résumer, j'ai une classe Person et un Doctor, qui étend Person et a le même id de celui-ci. Je dois récupérer une personne de la base de données et en faire un médecin, en conservant toutes les données de l'entité Personne, mais en créant des données supplémentaires pour le Docteur.jpa comment créer une nouvelle entité avec le même identifiant que l'entité parente (JOINED Inheritance)
Essayer de fusionner le médecin génère un nouvel identifiant, ce qui n'est pas valide pour moi.
Here's ce que dans le premier essayé Ive a lieu
private Person getDoctor(Person person) {
// Person already a doctor ==> OK
if (person instanceof Doctor) {
return person;
}
// Transient Person ==> //Transient Doctor OK
if (person == null) {
return new Doctor();
}
// Creates a Doctor from the person (only setting id...),
// and merges it ==>
fails as the id changes.
Doctor doctor = new Doctor(person);
return personDAO.merge(doctor);
}
sorry guys,first time here.
Here´s the code above:
private Person getDoctor(Person person) {
//Person already a doctor ==> OK
if (person instanceof Doctor) {
return person;
}
//Transient Person ==> //Transient Doctor OK
if (person == null) {
return new Doctor();
}
//Creates a Doctor from the person (only setting id...), and merges it ==> fails as the id changes.
Doctor doctor = new Doctor(person);
return personDAO.merge(doctor);
}
@Inheritance(strategy = InheritanceType.JOINED)
@Entity
public class Person{
}
@Entity
public class Doctor extends Person{
public Doctor(Person person) {
if (person != null) {
this.setId(person.getId());
}
}
}