Announcement

Collapse
No announcement yet.

(Frischer) EntityManager gibt alte Werte zurück?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • (Frischer) EntityManager gibt alte Werte zurück?

    Hallo!
    Ich habe eine Webanwendung mit EJB 3, JSF und EclipseLink als PersistenceProvider.

    In einem Controller wird eine Entity erzeugt:
    Code:
    @ConversationScoped
    public class ConfirmEntityController {
       @EJB
       private EntityDAO _dao;
    
       public String confirm() {
           _dao.saveEntity(new Entity(...));
           _conversation.end();
       }
    }
    Danach bekommt der Benutzer eine E-Mail mit einer Link um das erstellte Objekt zu bestätigen. An diesem Punkt verändere ich das gerade angelegte Objekt in der Datenbank und setze das Erstellungsdatum einige Tage zurück. Danach wird die Link aufgerufen:
    Code:
    @ConversationScoped
    public class ConfirmationController {
       @EJB
       private EntityDAO _dao;
    
       public void confirm() {
          entity = _dao.getEntityByHash(hash);
       }
    }
    Code:
    @Stateless
    public class BookingRequestDAO {
       @PersistenceContext
       private EntityManager _entityManager;
    
       public void saveEntity(Entity e) {
          _entityManager.persist(e);
       }
    
       public Entity getEntityByHash(String hash) {
          Query query = _entityManager.createNamedQuery("Entity.findByConfirmHash", Entity.class);
          query.setParameter("confirmHash", confirmHash);
          Entity result = null;
          try
          {
              result = (Entity) query.getSingleResult();
              // _entityManager.refresh(result);
          }
          catch (NoResultException ex)
          {
              return null;
          }
            
          return result;
       }
    }
    An dieser stelle steht das ursprüngliche Datum in dem Objekt, und nicht das veränderte. Das verstehe ich nicht, es handelt sich ja um eine neue Conversation (wenn auch nicht um eine neue session, da diese im code nicht invalidiert wird). trotzdem sollte doch das Objekt frisch aus der Datenbank geholt werden, oder?
    Wenn ich die auskommentierte Zeile in EntityDAO.getEntityByHash() einkommentiere erhält das Objekt die aktuellen Daten, aber das kann doch nicht die Lösung sein, es muss doch etwas allgemeingültiges geben?

    Kann mir da jemand helfen?
    Vielen Dank im Voraus!
Working...
X