Obtenir les anciennes données avec JPA

Je me fais vieux données avec JPA, même si je désactive le cache. Je suppose que c'est parce que la ressource est configuré pour être RESOURCE_LOCAL, mais je ne suis pas sûr.

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="AppPU" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>com.myentities.User</class>
        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://127.0.0.1:3306/mydatabase"/>
            <property name="javax.persistence.jdbc.password" value="*****"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.user" value="user1"/>
            <property name="eclipselink.logging.level" value="FINEST"/>
        </properties>
    </persistence-unit>
</persistence>

Mon code qui est en train de vieillir info sur l'utilisateur:

public List<User> findAll(App app) {       
        getEntityManager().getTransaction().begin();        
        Query q = getEntityManager().createQuery("SELECT t1 FROM User t1 WHERE t1.app.idApp=:idApp");
        q.setParameter("idApp", app.getIdApp());
        getEntityManager().flush();
        getEntityManager().getTransaction().commit();
        List resultList = q.getResultList();        
        return resultList;
    }

Mon entité:

@Entity
@Table(name = "user")
@Cache (
     type=CacheType.NONE
     )
public class User implements Serializable {

//some attributtes

}

Quelqu'un a une idée de ce qui se passe?

Mise à JOUR de 1

La commencer, rincer et commettre méthodes ont été seulement des actes de désespoir! Je sais qu'il n'est pas nécessaire.

J'ai oublié de dire quelque chose important: le test-je faire est d'ajouter un enregistrement d'utilisateur direct sur la console de base de données et puis essayer de voir à travers mes webapp, qui est ne pas montrer le nouvel utilisateur. C'est le "vieux de données" je l'ai mentionné, il affiche seulement "des anciens utilisateurs".

J'ai déjà essayé de mettre cela sur persistence.xml et je ne vois pas de différence dans les résultats:

<property name="eclipselink.cache.shared.default" value="false"/>
<property name="eclipselink.cache.size.default" value="0"/>
<property name="eclipselink.cache.type.default" value="None"/>

Donc, c'est autre chose...

  • 1) Vous n'avez pas besoin de démarrer/chasse/de commettre l'une transaction lors de la seule interrogation. 2) d'Où vient le "sistema" objet venu? Pourquoi le 'app' argument n'est utilisé dans la méthode?
  • c'est que l'ensemble de la méthode? la chasse d'eau et s'engager n'ont pas de sens là. De quelle façon les données de l'ancien? Quel est le problème avec elle? Qu'avez-vous fait à l'intérieur de la portée de l'EntityManager? Quels sont tous les appels et les modifications apportées entre l'ouverture et la fermeture de l'EM? On devine que vous avez laissé l'état de la mémoire de votre entités de tomber de la synchronisation avec la base de données.
InformationsquelleAutor André | 2011-10-28