1

エンティティマネージャでJPAエントリを作成するプログラムがあります。プロセス中にエラーは発生しません

...
factory = Persistence.createEntityManagerFactory("perst");
EntityManager entityManager = factory.createEntityManager();

entityManager.getTransaction().begin();
entityManager.persist(object);
entityManager.getTransaction().commit();

...

entityManager.close();

データを読み取るために次のようなプログラムを作成しましたが、データが返されません。クエリは空を返します。理由は何でしょうか?

これは、データを読み取るためのプログラムです。

static List<String> classList = new ArrayList<String>();
    private static EntityManagerFactory factory;

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        factory = Persistence.createEntityManagerFactory("perst");
        EntityManager entityManager = factory.createEntityManager();

        classList.add("LeaveRequest");
        classList.add("person");

        for (Object classOjc : classList) {

            String className = classOjc.toString();

            Query query = entityManager.createQuery("SELECT p FROM " + className + " p");

            @SuppressWarnings("rawtypes")
            List resultList = query.getResultList();

            System.out.println(resultList.size());

            for (Object result : resultList) {

                System.out.println(result.toString());
            }
        }
    }

xmlの永続性は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
    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_1_0.xsd">


    <persistence-unit name="perst" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>LeaveRequest</class>
        <class>person</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
            <property name="javax.persistence.jdbc.url"
                value="jdbc:derby:/home/vogella/databases/simpleDb;create=true" />
            <property name="javax.persistence.jdbc.user" value="Sales" />
            <property name="javax.persistence.jdbc.password" value="" />
            <!-- EclipseLink should create the database schema automatically -->
            <property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
            <property name="eclipselink.ddl-generation.output-mode"
                value="database" />
            <property name="eclipselink.logging.level" value="SEVERE" />
            <property name="eclipselink.logging.exceptions" value="true" />
        </properties>
    </persistence-unit>
</persistence>
4

1 に答える 1

1

アプリが起動するたびにスキーマを削除して再作成するようにeclipselinkを構成しました。

<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />

したがって、明らかに、いくつかのエントリを保持する最初のアプリケーションを実行し、次に最初のアプリケーションが書き込んだものを読み取ろうとする2番目のアプリケーションを実行すると、eclipselinkはすべてを削除し、毎回スキーマを再作成するため、何も見つかりません。

于 2013-03-17T22:10:49.323 に答える