AppEngineを使い始めたばかりですが、データストアに問題があります。
JPAを使用してデータストアにデータを書き込みたい。Appengine WebサイトのJavaの例をゲストブックの例でフォローしてきましたが、このゲストブックの例をJPA2.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 "version =" 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>
そしてこれはコードです:
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();
}