У меня проблема с тем, что менеджер сущностей сохраняет сущность, которая, как мне кажется, не изменилась во время сброса.
Я знаю, что следующий код является проблемой, потому что, если я закомментирую его, сущность не будет сохраняться. В этом коде все, что я делаю - это загружаю сущность и вызываю несколько получателей.
Query qry = em.createNamedQuery("Clients.findByClientID");
qry.setParameter("clientID", clientID);
Clients client = (Clients) qry.getSingleResult();
results.setFname(client.getFirstName());
results.setLname(client.getLastName());
...
return results;
Позже в другом методе я делаю другой namedQuery, который приводит к сбросу диспетчера сущностей. По какой-то причине клиент, загруженный выше, сохраняется.
Причина, по которой это проблема, заключается в том, что в середине всего этого находится какой-то старый код, который вносит некоторые прямые изменения JDBC в клиент. Когда менеджер сущностей остается, изменения, сделанные прямым JDBC, теряются.
Теория, которую мы имеем на данный момент, заключается в том, что менеджер сущностей сравнивает сущность с базовой записью, видит, что она отличается, а затем сохраняет ее.
Может ли кто-нибудь объяснить или подтвердить поведение, которое мы наблюдаем?