2016-03-03 4 views
1

У меня возникла проблема с синхронизацией поля базы данных.Java Hibernate EntityManager sync

У меня есть класс Singleton, например EntityManager, я использую такой код:

Persistence.createEntityManagerFactory("Myproject_EJB") 

Я создаю EntityManager, используя этот синглтон как с WebApplication и от WebService слоя и использовать его для доступа к персистенции.

Пользователь может изменить это поле базы данных с помощью WebApplication, но данные хранятся в базе данных только после завершения запроса (запрос может занять несколько секунд). Между тем, если кто-то звонит в WebService и запрашивает одно и то же поле, у меня есть несогласованное состояние.

В persistence.xml У меня есть use_second_level_cache и use_query_cache set true, а transaction-type = "JTA".

В WebAPP Я использую подобный код для данных обновления:

EntityManager em = EntityMan.getEMF().createEntityManager();  
    try { 
     em.find(Tel.class, tel.getTelId()); 
     em.merge(tel); 
     em.flush(); 
    } catch (Exception e) { 
     logger.debug(e.getMessage()); 
     e.printStackTrace(); 
    } 

Как я могу решить, пожалуйста ??

ответ

0

Не используйте кеширование для данных, которые часто меняются или время кеша очень мало? вы можете установить кеши на уровне таблицы http://www.tutorialspoint.com/hibernate/hibernate_caching.htm , просто указывая указателям, чтобы посмотреть не идеальный ответ.

+0

Я не думаю, что проблема с кешем, я вижу, что данные в базу данных обновляются только после завершения запроса. Я знаю, что спящий режим использует сеанс-за-запрос, возможно, это мое условие, но как я могу изменить это поведение? И как я могу изменить только эту функцию, а не для всех приложений? – tulkas85