J'ai deux classes, ServiceType et ServiceRequest. Chaque ServiceRequest doit spécifier quel type de ServiceType il est. Tous les ServiceType sont prédéfinis dans la base de données et ServiceRequest est créé lors de l'exécution par le client.Mise en correspondance Hibernate avec l'objet existant
Voici mes fichiers .hbm:
<hibernate-mapping>
<class dynamic-insert="false" dynamic-update="false" mutable="true" name="xxx.model.entity.ServiceRequest" optimistic-lock="version" polymorphism="implicit" select-before-update="false">
<id column="USER_ID" name="id">
<generator class="native"/>
</id>
<property name="quantity">
<column name="quantity" not-null="true"/>
</property>
<many-to-one cascade="all" class="xxx.model.entity.ServiceType" column="service_type" name="serviceType" not-null="false" unique="false"/>
</class>
</hibernate-mapping>
et
<hibernate-mapping>
<class dynamic-insert="false" dynamic-update="false" mutable="true" name="xxx.model.entity.ServiceType" optimistic-lock="version" polymorphism="implicit" select-before-update="false">
<id column="USER_ID" name="id">
<generator class="native"/>
</id>
<property name="description">
<column name="description" not-null="false"/>
</property>
<property name="cost">
<column name="cost" not-null="true"/>
</property>
<property name="enabled">
<column name="enabled" not-null="true"/>
</property>
</class>
</hibernate-mapping>
Quand je cours, je reçois
com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails
Je pense que mon problème est que lorsque je crée un Nouvel objet ServiceRequest, ServiceType est l'une de ses propriétés, et par conséquent lorsque je sauvegarde ServiceRequest à la base de données, Hibernat e tente à nouveau d'insérer l'objet ServiceType et constate qu'il existe déjà. Si c'est le cas, comment faire pour que Hibernate pointe vers le ServiceType existant au lieu d'essayer de l'insérer à nouveau?
Le code jetant l'erreur:
/* Get existing Service Type from database */
ServiceType st = DAOFactory.getDAOFactory().getServiceTypeDAO().getServiceType(newServiceTypeName);
/* Set the ServiceType of the new Service Request*/
newServiceRequest.setServiceType(st);
/* Error occurs inside this function which simply calls
session.beginTransaction();
session.save(sr);
session.getTransaction().commit(); */
DAOFactory.getDAOFactory().getServiceRequestDAO().saveData(newServiceRequest);
return "newRequestDone";
quel est le code que vous exécutez qui cause cette exception? – oedo
Cela se produit lorsque j'essaie d'enregistrer ServiceRequest. C'est juste un simple session.beginTransaction(); session.save (sr); session.getTransaction(). Commit(); –