Les entités sont-elles mises en cache dans jpa par défaut?
Je ajouter une entité à ma base de données et il fonctionne très bien. Mais lorsque je récupère la Liste, j'ai l'ancienne entité, les nouvelles entités-je ajouter, ne sont pas affichés jusqu'à ce que je annulez le déploiement de l'application et de les redéployer à nouveau. Cela signifie que sont mes entités mises en cache par défaut? Mais, je n'ai pas fait tous les paramètres pour la mise en cache des entités dans mon persistence.xml ou d'un tel fichier.
J'ai même essayé d'appeler la méthode flush (), (actualisation) et de fusion(). Mais encore, il montre les anciennes entités. Ai-je raté quelque chose? S'il vous plaît aider moi.
source d'informationauteur TCM
Vous devez vous connecter pour publier un commentaire.
Bienvenue à la JPA. Si vous l'utilisez, cela signifie que vous allez avoir de gros problèmes si vous mettez à jour la base de données à l'extérieur de la JPA, sauf si vous savez ce que vous faites et sont très prudents. Cela signifie que vous devez comprendre comment vider les entités de cache, de sorte qu'ils peuvent être rechargés.
Fondamentalement, ne pas mettre à jour des entités à l'extérieur JPA si vous pouvez à tous de l'aider et si vous le faites, vous aurez probablement à obtenir dans les rouages de la mise en cache modèle utilisé par votre fournisseur JPA. Si vous avez besoin de mettre à jour à l'extérieur de JPA beaucoup, alors JPA n'est probablement pas le bon choix pour vous.
JPA 1.0 ne permet pas de définir un cache L2 ("cache partagé"), JPA 1.0 définit seulement une cache L1 ("transactionnelle cache"), mais JPA fournisseurs peuvent soutenir un cache d'objets partagés, et la plupart le font. C'est le cas de TopLink Essentials, qui prend en charge L1 et L2 cache par l'intermédiaire de JPA Extensions pour la mise en Cache (par la JVM).
Maintenant, comme expliqué dans l'excellent article Comprendre le cache de TopLink Essentials(GlassFish JPA):
Donc il doit y avoir autre chose de mal avec votre installation. Vous pouvez essayer faire désactiver la session partagée cache pour objectif de test (et uniquement pour des fins de test) par l'ajout de la propriété suivante:
Mais je serais surpris si cela change quoi que ce soit. Comme je l'ai dit, je pense qu'il y a un autre problème quelque part.
PS: Ceci ne répond pas à la question mais, si vous êtes à l'aide de GlassFish v3, pourquoi n'utilisez-vous pas EclipseLink?
Mise à jour: répondre à un commentaire de l'OP
Bien, si vous ne créez pas la lien entre les entités à l'Java niveau, JPA ne serez pas en mesure de le créer à la base de données (JPA seulement ce que vous lui dites de le faire). Donc, ouivous avez besoin pour créer le lien et, dans le cas d'une association bidirectionnelle, vous devez définir les deux côtés de la liaison (par exemple, ajouter la
employee
à la collecte des employés sur leDepartment
et définir ladepartment
d'unEmployee
).JPA 2.0 définit partagé (L2) mémoire cache, mais ne spécifie pas la valeur par défaut. EclipseLink permet la mise en cache par défaut, les autres fournisseurs ne sont pas.
Un EntityManager aura toujours un contexte de persistance (L1) cache jusqu'à ce que vous appelez clear() ou en créer un nouveau.
Vous pouvez désactiver le cache partagé,
Voir, http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Caching
Mais votre problème est que vous n'êtes pas maintenir les deux côtés de votre relation. Lorsque vous définissez le 1-1, vous devez ajouter à la 1-m, sinon vos objets ne sont pas valides.
Pour plus d'informations sur la mise en cache voir,
http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Caching
Êtes-vous à l'aide de l'EntityManager? si ne pas essayer http://docs.oracle.com/javaee/5/api/javax/persistence/EntityManager.html
Êtes-vous à l'aide d'une source de données pour gérer les connexions à votre base de données? vous devriez l'essayer aussi. Est un fichier xml qui est configuré sur votre serveur. Donner plus d'informations à propos de votre architecture afin que nous puissions vous aider.
Je suis en utilisant le contexte de eclipselink et ejb,j'ai constaté que lorsque j'ai une requête entités,il sera automatiquement mis en cache,mais j'ai également exécuter une fonction pour modifier l'enregistrement en base de données,afin que je puisse obtenir les anciennes données dans le cache,j'ai donc désactiver le cache en ajoutant ce qui suit au fichier
persistence.xml
:il ne fonctionne!