2013-03-05 2 views
0

Я пытаюсь сохранить данные в хранилище данных Google App с помощью JPA, и у меня есть некоторые проблемы.Персистентные данные в хранилище данных google app engine

Мой код:

try { 
     for (int i = 1; i <= 10; i++) { 
      Employee emp = new Employee(); 

      emp.setFirstName("John" + i); 
      emp.setLastName("Doe" + i); 
      emp.setAge(i); 

      em.persist(emp); 
      em.refresh(emp); 
     } 

     em.flush(); 

    } catch (Exception e) { 

     e.printStackTrace(); 
    } finally { 
     em.close(); 
    } 

Когда я запускаю его, данные сохраняются, но 2 ошибки происходит:

javax.persistence.TransactionRequiredException: Эта операция требует сделки пока она не активна -> линия em.flush();

и

java.lang.NullPointerException на org.datanucleus.ObjectManagerImpl.flushInternalWithOrdering (ObjectManagerImpl.java:3887) -> линия em.close();

Кто-нибудь знает, как их исправить?

Спасибо.

ответ

0

Try:

em.getTransaction().begin(); 
//do all your persist logic 
em.getTransaction().commit(); 

Для более: https://developers.google.com/appengine/docs/java/datastore/transactions

+0

Он работает, спасибо. Но могу ли я сделать это без транзакции? (Только для информации) –

+0

вы можете 'persist' без необходимости совершать транзакции, но, как вы видите, вам нужна транзакция, если вы хотите' flush'. Я советую вам использовать txns, так как вы сохраняете несколько данных. В случае ошибки вы можете просто откат. – ogzd

Смежные вопросы