J'implémente la relation un à un (un employé < -> un mobile) en hibernation comme suit. Ce code fonctionne bien, mais comme il s'agit d'une relation un à un, assigner le même numéro de mobile à emp1 et emp2 aurait créé un problème (cela viole la relation) mais le code accepte et ajoute 2 emps avec le même mobile. Pourquoi hiberner est-il une relation un à un comme < -> beaucoup d'employés? Mon code: @EntityRelation un à un en mode hibernation
public class Employee {
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private String name;
@OneToOne
private Mobile mobile;
//...rest of the code
}
@Entity
public class Mobile {
@Id @GeneratedValue
private int id;
private long number;
//...rest of the code
}
Test Client main(...){
Mobile mobile = new Mobile(9999999999L);
Employee emp1 = new Employee("Raja");
Employee emp2 = new Employee("Raja");
emp1.setMobile(mobile);
emp2.setMobile(mobile);// VIOLATING 1-1 RELATIONSHIP
//...REST OF THE COMMON CODE
session.save(mobile);
session.save(emp1);
session.save(emp2);
session.getTransaction().commit();
}
BASE DE DONNÉES Combine EMP RECORDS AVEC LE NUMÉRO MOBILE MÊME (1-1 INFRACTION)
Utilisez-vous la propriété hibernate 'hibernate.hbm2ddl.auto' pour générer vos tables? hibernate ajoute automatiquement la contrainte d'unicité quand elle est responsable de la création des tables sinon il faut l'ajouter manuellement. –
duplicata possible de https://stackoverflow.com/questions/8968294/why-onetoone-is-allowing-duplicate-associations –
Oui, ceci est similaire à la question dans le lien de commentaire. Toutes mes excuses pour la répétition –