Question

J'utilise le printemps 3.0 avec mvc EclipseLink et JPA et je confronté au problème suivant: J'ai ce domaine dans mon application:

@OneToMany(mappedBy = "stadium")
private Set<FootballMatch> footballMatches = new HashSet<FootballMatch>();

quand il se déclenche une action qui ajoute de nouveaux éléments en jeu via Set.add(), les changements ne se présente pas dans le navigateur, althought il y a de nouvelles lignes dans la base de données. Lorsque j'effacer le cache du navigateur, rien ne se passe. Je l'ai découvert que d'une manière comment forcer la charge de nouvelles valeurs est de redéployer l'application, même sans changement de ligne unique. Ainsi, l'application retourne vieilles valeurs, la mise en cache quelque part. Comment puis-je forcer à AllWays de charge mises à jour des valeurs? Je pensais à quelque chose comme getLastModified(), mais je ne sais pas où dois-je mettre en œuvre.

Était-ce utile?

La solution

Comme il est une relation bidirectionnelle, assurez-vous que vous définissez les deux côtés de la relation.

Voir, http://en.wikibooks.org/wiki/Java_Persistence/Relationships#Object_corruption. 2C_one_side_of_the_relationship_is_not_updated_after_updating_the_other_side

Assurez-vous également que vous modifiez, la fusion, engageant les bons objets.

Essayez d'utiliser EntityManager.refresh () pour rafraîchir l'objet, vous obtenez les valeurs mises à jour? Si vous ne pas, votre base de données n'a pas les données.

Êtes-vous en cache la EntityManager dans votre application? Si vous avez un vieux EntityManager autour d'elle ne verra pas de nouveaux changements. Normalement, une nouvelle EntityManager doit être créé pour chaque demande / transaction.

EclipseLink maintient un cache d'objet par défaut, cela peut être désactivé en utilisant la propriété persistence.xml, "Eclipselink.caching.shared" = "false"

Voir, http://wiki.eclipse.org/EclipseLink/Examples/JPA/Caching

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