【问题标题】:JPA entries are not created or retrieved未创建或检索 JPA 条目
【发布时间】:2013-03-06 01:13:14
【问题描述】:

我正在使用实体管理器创建 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>

【问题讨论】:

  • 如果您没有收到任何错误,并且返回的列表大小为 0,那么它只是意味着这些表中没有任何内容。你用的是哪个数据库?每次启动应用程序时是否都重新创建架构?
  • 首先我建议你写一个 JUnit 测试而不是上面的这个逻辑。也很高兴看到你的persistence.xml 来查看配置。
  • @JBNizet-我在输入数据时没有收到错误,所以我猜这些条目应该是持久的......,(如果没有,我认为我在提交中失败)有一种方法创建条目以验证该过程是否成功?数据库是 eclipselink 的德比
  • @BalázsMáriaNémeth-用 xml 编辑了我的帖子

标签: java database jpa eclipselink entitymanager


【解决方案1】:

您将 eclipselink 配置为在每次启动应用程序时删除并重新创建架构:

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

很明显,如果您运行第一个应用程序保留一些条目,然后运行第二个应用程序尝试读取第一个已写入的内容,您将找不到任何内容,因为 eclipselink 删除所有内容并重新创建架构时间。

【讨论】:

    猜你喜欢
    • 2013-12-08
    • 2015-12-30
    • 2018-11-18
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 2018-04-13
    相关资源
    最近更新 更多