Comment éviter le polymorphisme dans la requête superclasse lors de l'utilisation JPA et Hibernate

tenticon:

J'utilise JPA printemps + hiberne pour se connecter à une base de données Oracle avec 2 tables: Customerset LegacyCustomers.

Customersétend LegacyCustomersen 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

Vlad Mihalcea:

Pour atteindre votre objectif, vous devez utiliser l' @MappedSuperclassannotation à la place à une nouvelle BaseCustomersclasse 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' LegacyCustomersextension juste le BaseCustomerset ajoute que l' @Entityannotation puisque l' BaseCustomersest pas traitée comme une entité:

@Entity
@Table(name="LegacyCustomers")
public class LegacyCustomers extends BaseCustomers {

}

Et l' Customersentité 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.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=212285&siteId=1
conseillé
Classement