3

Play!を使用する フレームワーク2.0.2では、JavaプロジェクトからH2テストデータベースに複数のアイテムを追加すると、ITEMテーブルに1つのアイテムしか表示されません。私が永続化した最後のエントリである単一のアイテム。これは、コミットするたびにデータベースが再作成されるためだと思いました。そのため、application.confファイルにJPA.ddl=updateプロパティを追加することを考えました。しかし、これは単に次のエラーで壊れます。何

これが私のコードです(Item.save()メソッド内):

package models;

import java.math.BigDecimal;

import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Persistence;

@Entity
public class Item {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public int id;
    public String name;
    public String dev;
    public String type;
    public int quantity;
    public BigDecimal unitPrice;

    public Item() {}

    public Item(String name, String dev, String type, int quantity,
            BigDecimal unitPrice) {
        super();
        this.name = name;
        this.dev = dev;
        this.type = type;
        this.quantity = quantity;
        this.unitPrice = unitPrice;
    }

    /**
     * Insert this new computer.
     */
    public void save() {
        //this.id = id;
        EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("defaultPersistenceUnit");
        EntityManager entityManager = entityManagerFactory.createEntityManager();
        entityManager.getTransaction().begin();
        entityManager.persist(this);        
        entityManager.getTransaction().commit();
        entityManager.close();
    }
}

これがエラーメッセージです

Caused by: javax.persistence.PersistenceException: No Persistence provider for EntityManager named update
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69) ~[hibernate-jpa-2.0-api-1.0.1.Final.jar:1.0.1.
Final]
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47) ~[hibernate-jpa-2.0-api-1.0.1.Final.jar:1.0.1.
Final]
        at play.db.jpa.JPAPlugin.onStart(JPAPlugin.java:35) ~[play_2.9.1.jar:2.0.2]
        at play.api.Play$$anonfun$start$1.apply(Play.scala:60) ~[play_2.9.1.jar:2.0.2]
        at play.api.Play$$anonfun$start$1.apply(Play.scala:60) ~[play_2.9.1.jar:2.0.2]
        at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59) ~[scala-library.jar:0.11.3]
4

1 に答える 1

4

/ conf / META-INF /ディレクトリ内にpersistence.xmlファイルを含める必要があり、そこから永続性ユニットを定義する必要があると思います。これは、Hibernateを正しく使用しているためだと思いますか?

あなたがどのように見えるかの例

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
             version="2.0">

    <persistence-unit name="update">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
            <property name="hibernate.connection.url" value="jdbc:h2:mem:events"/>
        </properties>
    </persistence-unit>

</persistence>

タグには、いずれ<jar-file>かを含める必要があり<class>ます。そうしないと、同様に使用することになります。

于 2012-07-03T20:06:33.827 に答える