【问题标题】:Error using Hibernate with H2 in memory database在内存数据库中使用 Hibernate 和 H2 时出错
【发布时间】:2013-05-01 07:27:55
【问题描述】:

我正在使用 Hibernate。如何配置我的 persistence.xml 以拥有 H2 内存数据库?

我的 persistence.xml 是:

<?xml version="1.0" encoding="UTF-8" ?>
<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" xmlns="http://java.sun.com/xml/ns/persistence">
    <persistence-unit name="persistenceUnit"
        transaction-type="RESOURCE_LOCAL">

        <class>com.mastertheboss.domain.Employee</class>
        <class>com.mastertheboss.domain.Department</class>
        <properties>

            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1" />
            <property name="javax.persistence.jdbc.user" value="sa" />
            <property name="javax.persistence.jdbc.password" value="" />
            <property name="hbm2ddl.auto" value="update" />

            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
        </properties>

    </persistence-unit>
</persistence>

但是当我运行我的应用程序时,我收到以下错误

Internal Exception: org.h2.jdbc.JdbcSQLException: Table "EMPLOYEE" not found; SQL statement: SELECT ID, NAME, DEPARTMENT_ID FROM EMPLOYEE [42102-171] Error Code: 42102 Call: SELECT ID, NAME, DEPARTMENT_ID FROM EMPLOYEE Query: ReadAllQuery(referenceClass=Employee sql="SELECT ID, NAME, DEPARTMENT_ID FROM EMPLOYEE")

【问题讨论】:

    标签: java hibernate jpa h2


    【解决方案1】:

    您应该在第一次运行应用程序时将 hibernate.hbm2ddl.auto 属性设置为“create”,以创建表

    <property name="hibernate.hbm2ddl.auto" value="create" />
    

    然后(如果您不希望每次启动时都重新创建和清空表)将其设置为“验证”。

    <property name="hibernate.hbm2ddl.auto" value="validate" />
    

    要自动创建架构,请将 if-not-exists 添加到您的连接 url,如下所示:

    <property name="hibernate.connection.url" value="jdbc:h2:~/<filename>;INIT=CREATE SCHEMA IF NOT EXISTS <schema_name>" />
    

    【讨论】:

    • @andPat 这个解决方案可能是最正确的。如果你不能让它工作,问题可能出在其他地方。
    • 但如果我这样做,我必须删除` ` ,对吗?
    • 是的,你应该更换那个。
    • 别忘了填写你的
    • 您知道为什么create 会添加约束,而update 不会吗?即使我从一个空的(甚至不存在的)或内存数据库开始?
    猜你喜欢
    • 2019-02-22
    • 1970-01-01
    • 2017-10-22
    • 2013-08-11
    • 2016-12-24
    • 1970-01-01
    • 2019-10-25
    • 2019-02-07
    • 1970-01-01
    相关资源
    最近更新 更多