Я разработал довольно большое приложение CRUD, используя базу данных MYSQL Database и Swing Application и javax.persistence. Мой вопрос: как лучше всего управлять моими транзакциями с учетом javax.persistence.Entitymanager? В настоящее время у меня есть один экземпляр менеджера Entity, который находится в классе Application. Он передается на все запрашивающие страницы, которые, в свою очередь, используют его для сохранения и объединения объектов. Я запускаю транзакцию при запуске приложения и фиксирую (и перезапускаю) каждый раз, когда производится изменение. Это правильно? или должен ли я иметь отдельный диспетчер Entity Manager для каждого компонента/страницы? Когда мне следует совершать? Все эти вопросы возникли сейчас, потому что я недавно начал получать исключения из этого типа: java.sql.SQLException: превышено время ожидания блокировки; попробуйте перезапустить транзакцию Код ошибки: 1205 , который заставил меня поверить, что я делаю что-то не так в моем управлении транзакциями с базами данных ....Как управлять транзакциями базы данных с использованием Entity Manager в относительно большом приложении?
Заранее благодарим за любую помощь, которую вы можете мне дать!
Большое вам спасибо! наконец-то кто-то объяснил мне этот момент ... один вопрос: почему вы делаете старую emf в вашем примере? ОК, чтобы сделать его частным членом EMF? В моем случае здание emf несколько сложнее, поэтому я предпочитаю делать это внутри функции init моего класса приложения. Я думал о следующем: открытый класс EMF { private EntityManagerFactory emf; static { emf = Persistence.createEntityManagerFactory ("MyEMF"); } public static EntityManager getEM() { return emf.createEntityManager(); } } – Vova
Ну, основная причина, связанная с созданием emf static, заключается в том, что метод getEM также является статическим, и невозможно связать нестатическое поле со статическим контекстом. Поскольку я не собираюсь создавать экземпляр класса EMF, было бы гораздо разумнее сделать статический метод getEM. Если вы не хотите, чтобы emf статичное поле, вам также необходимо сделать getEM нестатичным. – joanlofe