/ / Spring Roo JPA - Pourquoi les mises à jour manuelles de bases de données sont-elles automatiquement disponibles dans un contexte de persistance? - java, hibernate, sql-server-2005, jpa, spring-roo

Spring Roo JPA - Pourquoi les mises à jour manuelles de la base de données sont-elles automatiquement disponibles dans Persistence Context? - java, hibernate, sql-server-2005, jpa, spring-roo

J'ai développé une application Web en utilisant Spring Roo(Spring MVC 3), JPA 1, Hibernate, JSTL, JQUERY, etc. Les contextes de persistance sont gérés par l’application via un gestionnaire de transactions JPA. La base de données utilisée est MSSQL2005. L'application est en cours d'exécution sur JBOSS 5.

Tout fonctionne bien. Ma question est quelque chose qui me trottait dans la tête, mais je n’ai pas encore trouvé de réponse satisfaisante.

Supposons ce qui suit:

  1. Je récupère une ligne de la table T en utilisant entitymanager.find () et je présente les données à une page.
  2. Je modifie manuellement l'une des valeurs de champ dans la ligne (via SQL et un outil graphique).
  3. Je répète immédiatement l'étape (1), et j'ai la valeur mise à jour manuellement disponible.

Est-ce correct? D'après ce que j'avais compris, les valeurs du contexte de persistance ne sont pas mises à jour à moins que:

  • appeler em.refesh ()
  • L'objet n'est pas disponible dans PERSISTENCE CONTEXT (-> DB à la place)

Mon expérience semble contredire le lien ci-dessous, ce qui me semble logique.

Les données mises à jour (dans la base de données) ne sont pas visibles via JPA / Eclipselink.

Merci beaucoup

Sieste

Réponses:

1 pour la réponse № 1

C'est le comportement correct. Les valeurs dans un contexte de persistance ne seront pas "mises à jour sauf si vous appelez em.refresh () dans une SESSION. Lorsque vous récupérez à nouveau la page Web, l'ancienne session est fermée et une nouvelle session est ouverte avec les nouvelles données reflétées.