2012-09-12 6 views
2

Selon les documents hibernate, l'équipe d'hibernate recommande fortement de ne pas utiliser un à plusieurs mappages unidirectionnels sans la table de jointure. Je voudrais savoir est-ce en raison de problèmes de performance ou y at-il d'autres raisons derrière cela.Mappage un à plusieurs unidirectionnel avec joinColumn

Say si avoir un employé qui peut avoir de nombreux no.s de téléphone afin d'avoir cette carte, je vais avoir

@Entity 
public class Employee { 
... 
@OneToMany 
@JoinColumn(name="employee_fk") 
public List<Phone> phones; 
... 
} 

@Entity 
public class Phone { 
... 
} 

Hibernate va générer table de téléphone clé étrangère, donc je ne vois aucun problème ici. De plus, je ne veux pas que la classe téléphonique ait la propriété des employés. L'équipe Hibernate conseille d'utiliser une table de jointure dans un tel cas, mais pourquoi devrais-je créer une table inutilement?

Répondre

2

C'est plus une question de conception qu'une question de performance. Si vous considérez qu'un téléphone ne connaît pas l'employé auquel il est affecté, cela signifie que l'entité Téléphone est indépendante de l'entité Employé. Et si elle est indépendante de l'entité Employee, sa table ne doit pas contenir de clé étrangère dans la table Employee. De plus, étant donné qu'un téléphone ne connaît pas son employé, cela signifie qu'il pourrait potentiellement être réutilisé et être associé à d'autres types d'entités: entreprises, clients, etc. Il serait douteux d'avoir des clés étrangères à tous les employés. les entités qui peuvent avoir un téléphone dans la table de téléphone elle-même.

2

Dans le cas d'une mise en veille prolongée cartographie unidirectionnel frappera DB deux fois,

pour un nouveau téléphone sans du même employé John, il fera somthing comme celui-ci

insérer un nouveau téléphone sans en PHN aucune table

mise à jour l'ID d'employé (John) avec ce PHN pas dans PHN aucune table

de plus, vous devez mapper votre téléphone classe de persistance et d'enregistrer avec un employé en particulier, sinon votre classe de téléphone sera réutilisé, que je suppose tu ne veux pas faire.

Questions connexes