У меня возникла проблема с JPA и сохранением данных в базе данных. У меня есть следующий классJPA EntityManager не сохраняется
public class Grabber {
private EntityManagerFactory emfactory;
private EntityManager entitymanager;
public EntityManager getManager(){
emfactory = Persistence.createEntityManagerFactory("DSLTestV4");
entitymanager = emfactory.
createEntityManager();
entitymanager.getTransaction().begin();
return entitymanager;
}
public void Close(){
entitymanager.getTransaction().commit();
entitymanager.close();
emfactory.close();
}
}
А следующий которым расширяет граббер
public class TestfixtureGrabber extends Grabber{
public List<Testfixture> getAll(){
EntityManager manager = getManager();
List<Testfixture> result = manager.createNamedQuery("Testfixture.findAll").getResultList();
Close();
return result;
}
public Testfixture getById(int id){
EntityManager manager = getManager();
TypedQuery<Testfixture> query = manager.createQuery("SELECT w FROM User w WHERE w.user=" +id ,Testfixture.class);
Testfixture result = query.getSingleResult();
Close();
return result;
}
@Transactional
public int SaveTestfixture(Testfixture t){
EntityManager em = getManager();
em.persist(t);
em.flush();
int id = t.getId();
em.close();
return id;
}
}
Краткого операции работает нормально, и когда я сохранить объект получает идентификатор, и каким-то образом сохраняется в локальный контекст. Но когда я проверяю свою базу данных MySQL, он говорит, что таблица представляет собой пустой набор. Данные не сохраняются в базе данных.
Я пробовал разные вещи и пытался добавить flush() после сохранения, но не повезло.
Почему я не могу заставить эту работу работать? Есть идеи?
так вы закрыть EntityManager до совершения сделки? –
Вы не совершаете транзакции. Кроме того, EMF следует создавать один раз и только один раз. Создание это дорогостоящая операция, которая считывает все метаданные, аннотации и т. Д. Вы также должны соблюдать соглашения об именах Java, использовать try-finally, чтобы убедиться, что em всегда закрыт и т. Д. –