找不到Hibernate H2数据库

时间:2018-08-11 13:10:24

标签: java hibernate h2

我刚冬眠,所以我的问题对您来说很明显。我在H2控制台中用3个表(data.mv.db)创建了数据库,插入一些值,然后将其复制到项目路径中的数据库文件夹中。现在,我尝试读取其中一个进行测试,但是始终会出现表不存在的错误。我尝试将属性添加到连接URL,例如连接延迟或不将字母更改为大写,但仍然相同。

错误:

  

原因:org.h2.jdbc.JdbcSQLException:Tabela“ LOGIN_DATA” nie   istnieje找不到表“ LOGIN_DATA”; SQL语句:选择   login_data0_.ID为ID1_0_,login_data0_.USERNAME为USERNAME2_0_,   login_data0_.PASSWORD为PASSWORD3_0_,login_data0_.FAVOURITE为   来自PUBLIC.LOGIN_DATA login_data0_ [42102-192]的FAVOURIT4_0_   org.h2.message.DbException.getJdbcSQLException(DbException.java:345)     在org.h2.message.DbException.get(DbException.java:179)处   org.h2.message.DbException.get(DbException.java:155)在   org.h2.schema.Schema.getTableOrView(Schema.java:437)在   org.h2.command.Parser.readTableOrView(Parser.java:5371)在   org.h2.command.Parser.readTableFilter(Parser.java:1257)位于   org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1896)在   org.h2.command.Parser.parseSelectSimple(Parser.java:2044)在   org.h2.command.Parser.parseSelectSub(Parser.java:1890)在   org.h2.command.Parser.parseSelectUnion(Parser.java:1709)在   org.h2.command.Parser.parseSelect(Parser.java:1697)在   org.h2.command.Parser.parsePrepared(Parser.java:445)在   org.h2.command.Parser.parse(Parser.java:317)在   org.h2.command.Parser.parse(Parser.java:289)在   org.h2.command.Parser.prepareCommand(Parser.java:254)位于   org.h2.engine.Session.prepareLocal(Session.java:560)在   org.h2.engine.Session.prepareCommand(Session.java:501)在   org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1201)     在   org.h2.jdbc.JdbcPreparedStatement。(JdbcPreparedStatement.java:73)     在   org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:289)     在   org.hibernate.engine.jdbc.internal.StatementPreparerImpl $ 5.doPrepare(StatementPreparerImpl.java:145)     在   org.hibernate.engine.jdbc.internal.StatementPreparerImpl $ StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:171)     ...还有17个

休眠配置:

<?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <!-- Database connection settings -->
        <property name="connection.driver_class">org.h2.Driver</property>
        <property name="connection.url">jdbc:h2:file:~/database/data</property>
        <property name="connection.username">admin</property>
        <property name="connection.password">1234</property>

        <property name="hibernate.default_schema">PUBLIC</property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.H2Dialect</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <mapping class="data.Login_data"/>
    </session-factory>

</hibernate-configuration>

Login_data类:

@Entity
@Table(name = "LOGIN_DATA")
public class Login_data {

    private int id;
    private String name;
    private String password;
    private String values;

    public Login_data() {
        // this form used by Hibernate
    }

    public Login_data(int id, String name, String password, String values) {
        this.id = id;
        this.name = name;
        this.password = password;
        this.values = values;
    }

    @Id
    @GeneratedValue
    @Column(name = "ID")
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Column(name = "USERNAME")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Column(name = "PASSWORD")
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Column(name = "FAVOURITE")
    public String getValues() {
        return values;
    }

    public void setValues(String values) {
        this.values = values;
    }
}

主类:

public static void main(String[] args){
            Login_data user = new Login_data();
            SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
            Session session = sessionFactory.openSession();



                /*session.beginTransaction();
                session.save(user);
                session.getTransaction().commit();*/

                // now lets pull events from the database and list them
                session.beginTransaction();
                List result = session.createQuery("from Login_data").list();
                for (Login_data event : (List<Login_data>) result) {
                    System.out.println(event.getName());
                }
                System.out.print(result);
                session.getTransaction().commit();
                session.close();

        }

我尝试编辑配置。所以我添加:

 <property name="hibernate.hbm2ddl.auto">update</property>

并创建空数据库。奇怪的是,在H2 Console中打开后,Java创建的数据库和表不可见。这样就可能是问题。 我想放入很多数据,那么如何使它不在Java中可见呢?

1 个答案:

答案 0 :(得分:0)

感谢@JB Nizet,我看到了我的错误。我正在将数据库复制到项目路径,其中路径“〜/ database”显示到用户文件夹中的数据库,并且正在将其复制到项目文件夹,因此我应该使用“ ./database”。 仍然,如果我想使之可运行,就需要使用用户位置使其在其他计算机上正确运行。