Ma classe client utilise la méthode updateCustomer en classe CustomerService:erreur constante dans Hibernate modèle mise à jour hql
Customer updatedCustomer = new Customer("2314DD0", "POJO World", "Offers POJO service.");
customerService.updateCustomer(updatedCustomer);
J'ai essayé toutes sortes de choses à travailler autour de « updateOrSave », différents arguments pour la mise à jour, etc. sur. Le problème que je rencontre en fonction de la trace de la pile est un (HibernateOptimisticLockingFailureException) et un (org.hibernate.StaleStateException). Mais laissez-moi d'abord expliquer: Tous mes autres accès aux données (c'est-à-dire enregistrer, supprimer et interroger) fonctionnent parfaitement bien. Je me méfie de ma classe de domaine client, ainsi que du fichier Customer.hbm.xml que j'ai configuré.
Alors, ma classe de service à la clientèle:
public void updateCustomer(Customer updatedCustomer)
{
this.dao.update(updatedCustomer);
}
Service à la clientèle Dao:
public void update(Customer customerToUpdate)
{
template.update("Customer", customerToUpdate);
}
classe domain.Customer:
public class Customer
{
private int id;
private String customerId, companyName, email, telephone, notes;
private Customer() {}
public Customer(String customerId, String companyName, String email,
String telephone, String notes)
{
this.customerId = customerId;
this.companyName = companyName;
this.email = email;
this.telephone = telephone;
this.notes = notes;
}
//Getters and Setters for ALL instance variables listed after this point.
}
Enfin, mon Customer.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.crm.domain.Customer">
<id name="id" column="ID">
<generator class="native"/>
</id>
<property name="customerId"/>
<property name="companyName"/>
<property name="email"/>
<property name="telephone"/>
<property name="notes"/>
</class>
Ce que j'essaie de faire est de mettre à jour un client existant avec customerId de "2314DD0". Ce que j'ai fait est de remplacer l'un des paramètres du client par "POJO World". Ainsi, le client mis à jour aurait les attributs du "nouveau client", alors que le customerId et ainsi de suite sont les mêmes. C'est pourquoi j'ai cru que "mise à jour" serait plus approprié. – harryo
Si vous voulez mettre à jour, vous devriez probablement charger l'objet de la base de données par ID, puis apporter les modifications, puis mettre à jour. – digitaljoel