J'utilise JPA printemps + hiberne pour se connecter à une base de données Oracle avec 2 tables: Customers
et LegacyCustomers
.
Customers
étend LegacyCustomers
en ajoutant quelques autres colonnes.
@Entity
@Table(name="Customers")
public class Customers extends LegacyCustomers {
@Column(name="NewId") private String newId;
@Column(name="PhoneNumber") private String phoneNumber;
}
@Entity
@Table(name="LegacyCustomers")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class LegacyCustomers {
@Column(name="OldId") private String oldId;
@Column(name="Name") private String name;
@Column(name="Address") private String address;
}
Cependant , ils sont complètement différentes tables. Je cherche un moyen d'exprimer la relation en java mais il faut éviter le polymorphisme qui veille prolongée crée lors de l' interrogation de la table de superclasse ( LegacyCustomers
). Comment puis - je savoir en veille prolongée d'utiliser uniquement des colonnes de la superclasse quand je fais une recherche LegacyCustomers
?
Malheureusement , l'
@Polymorphism
annotation proposée
ici
ne aide pas.
Merci pour l'aide
Pour atteindre votre objectif, vous devez utiliser l' @MappedSuperclass
annotation à la place à une nouvelle BaseCustomers
classe qui encapsule les propriétés communes:
@MappedSuperclass
public class BaseCustomers {
@Column(name="OldId") private String oldId;
@Column(name="Name") private String name;
@Column(name="Address") private String address;
}
Par la suite, l' LegacyCustomers
extension juste le BaseCustomers
et ajoute que l' @Entity
annotation puisque l' BaseCustomers
est pas traitée comme une entité:
@Entity
@Table(name="LegacyCustomers")
public class LegacyCustomers extends BaseCustomers {
}
Et l' Customers
entité fait la même chose:
@Entity
@Table(name="Customers")
public class Customers extends BaseCustomers {
@Column(name="NewId") private String newId;
@Column(name="PhoneNumber") private String phoneNumber;
}
C'est ça.