방금 AppEngine을 시작했지만 데이터 스토어에 문제가 있습니다.Appengine 및 JPA - 방금 작성된 데이터 읽기
JPA를 사용하여 일부 데이터를 데이터 저장소에 쓰고 싶습니다. Appengine 웹 사이트의 Java 예제를 방명록 예제와 함께 사용하여이 방명록 예제를 JPA 2.0을 사용하여 번역하고 싶습니다.
내 데이터 저장소 (이전 실행을 사용하여 생성 한)에서 이미 사용할 수있는 일부 데이터로 응용 프로그램을 실행할 때 작성하기 전에 7 개 항목이 표시되고 쓰기가 정상인 것으로 나타납니다. 나중에 다시 7 개 항목 제공 . 하지만 내 admin-console (http : // localhost : 8888/_ah/admin/datastore? kind = Greeting)을 열면 데이터 저장소에 이미 8 개의 항목이 있음을 알 수 있습니다. 그래서 어떤 이유로 저는 팬텀을 읽는 중입니다 ...
내 모든 코드는 아래에 나와 있습니다.
내가 뭘 잘못하고 있는지 생각하는 사람이 있습니까?
이 내 persistence.xml을 보이는 방법입니다 같은 : http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd "버전 ="1.0 ">
<persistence-unit name="transactions-optional">
<provider>org.datanucleus.api.jpa.PersistenceProviderImpl</provider>
<properties>
<property name="datanucleus.NontransactionalRead" value="true"/>
<property name="datanucleus.NontransactionalWrite" value="true"/>
<property name="datanucleus.ConnectionURL" value="appengine"/>
</properties>
</persistence-unit>
그리고 이것은 코드입니다 : w 모든 들어
EntityManagerFactory emf = EMF.get();
EntityManager em = emf.createEntityManager();
try {
em.getTransaction().begin();
// Reading the data
javax.persistence.Query query = em.createQuery("SELECT FROM Greeting g");
List<Greeting> greetings = query.getResultList();
for (Greeting g : greetings) {
log.info("Greeting found: " + g.getContent());
}
log.info("Number of greetings found before writing: " + greetings.size());
// Storing the data
Greeting greeting = new Greeting();
greeting.setUser(user);
greeting.setDate(new Date());
greeting.setContent(content);
em.persist(greeting);
em.flush();
// Reading the data
query = em.createQuery("SELECT FROM Greeting g");
greetings = query.getResultList();
for (Greeting g : greetings) {
log.info("Greeting found: " + g.getContent());
}
log.info("Number of greetings found after writing: " + greetings.size());
em.getTransaction().commit();
} catch (Exception e) {
log.warning("Cannot write to database because of error: " + e.getMessage());
e.printStackTrace();
} finally {
em.close();
emf.close();
}