Question

Je l'ai mis en place une application ROO Spring, ensemble à la persistance OpenJPA et créé certaines entités. Ensuite, je l'ai remplacé Spring MVC avec Apache Wicket. Stuff semble fonctionner très bien et je l'ai affiché avec succès une liste d'entités clients.

Ensuite, ce fut la vue d'édition pour le client. Pour l'instant je l'ai fait une forme Wicket qui utilise l'entité OpenJPA directement en tant que modèle de forme, et donc je devais faire la classe d'entité mise en œuvre Serializable.

Maintenant, je ne suis pas sûr de savoir comment mettre en œuvre correctement la persistance OpenJPA, ce que j'ai maintenant est la suivante:

@Override
protected void onSubmit() {
    try {
        if (customer.getId()!=null) {
            customer.merge();
        }
        else {
            customer.persist();
        }
    }
    catch (Exception e) {
        throw new Error(e);
    }
    super.onSubmit();
}

qui fonctionne, mais seulement une fois par objet Client. En quelque sorte. C'est, je soumets ma forme une fois et il fonctionne à la fois avec un nouveau client (.persist ()) et un client existant (.merge ()). Cependant, je soumets à nouveau le formulaire pour le même client, je reçois cette erreur (j'ai ajouté quelques sauts de ligne ici):

<openjpa-2.0.0-r422266:935683 nonfatal store error>
org.apache.openjpa.persistence.OptimisticLockException:
An optimistic lock violation was detected when flushing object instance "no.magge.iumb.domain.crm.PrivateCustomer-379" to the data store.
This indicates that the object was concurrently modified in another transaction.

Ma question est, quelle est la bonne façon de persister avec OpenJPA et pourquoi je reçois cette erreur?

Wicket-sage: Dois-je avoir créé un IModel Wicket séparé avec un modèle client détachable et que cela pourrait être la raison pour laquelle je ces problèmes

?

Merci un tas pour tout conseil!

Était-ce utile?

La solution

Faites-vous une faveur et de séparer vos couches d'application. Code en vue ne devrait jamais accéder à une base de données.

Créer une couche de service et / ou une couche de Dao, test unitaire le code de ces couches pour voir qu'ils travaillent et injectent un objet ou un service dao dans le composant portillon incorporé. (Je vous recommande d'utiliser le printemps pour cela, mais vous pouvez aussi le faire manuellement)

Avec votre scénario, il y a tellement de choses différentes qui peuvent échouer dans un seul endroit, et il est presque impossible de les séparer.

Voici quelques conseils:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top