简体   繁体   English

找不到Hibernate H2数据库

[英]Hibernate H2 database not found

I'm quite new to hibernate so my problem can be obvious to you. 我刚冬眠,所以您的问题很明显。 I created database in H2 Console with 3 tables (data.mv.db), insert some values and then copied it to my database folder in project path. 我在H2控制台中用3个表(data.mv.db)创建了数据库,插入一些值,然后将其复制到项目路径中的数据库文件夹中。 Now I'm trying to read one of them for tests, but always have error that table not exists. 现在,我尝试读取其中一个进行测试,但是始终会出现表不存在的错误。 I've tried to add properties to connection url like connection delay or not changing letter to upper case but still the same. 我尝试将属性添加到连接URL,例如连接延迟或不将字母更改为大写,但仍然相同。

Error: 错误:

Caused by: org.h2.jdbc.JdbcSQLException: Tabela "LOGIN_DATA" nie istnieje Table "LOGIN_DATA" not found; 由以下原因引起:org.h2.jdbc.JdbcSQLException:未找到Tabela“ LOGIN_DATA” nie istnieje表“ LOGIN_DATA”; SQL statement: select login_data0_.ID as ID1_0_, login_data0_.USERNAME as USERNAME2_0_, login_data0_.PASSWORD as PASSWORD3_0_, login_data0_.FAVOURITE as FAVOURIT4_0_ from PUBLIC.LOGIN_DATA login_data0_ [42102-192] at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) at org.h2.message.DbException.get(DbException.java:179) at org.h2.message.DbException.get(DbException.java:155) at org.h2.schema.Schema.getTableOrView(Schema.java:437) at org.h2.command.Parser.readTableOrView(Parser.java:5371) at org.h2.command.Parser.readTableFilter(Parser.java:1257) at org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1896) at org.h2.command.Parser.parseSelectSimple(Parser.java:2044) at org.h2.command.Parser.parseSelectSub(Parser.java:1890) at org.h2.command.Parser.parseSelectUnion(Parser.java:1709) at org.h2.command.Parser.parseSelect(Parser.java:1697) at org.h2.command.Parser.parsePrepared(Parser.java:445) at org.h2.command.Parser.parse(Parser.java:317) at org.h2.command.Par SQL语句:从org.hd2.message(message.sql.sb.message.sql.message.org.blogs.sql.message(.org.db.message.message.org.blogs.sql.message.com.org.hs.message.org.blogs.com上的(42102-192))中选择Login_data0_.ID作为ID1_0_,login_data0_.USERNAME作为USERNAME2_0_,login_data0_.PASSWORD作为PASSWORD3_0_,login_data0_.FAVOURITE作为FAVOURIT4_0_,在org.hD.cException.message(SQL.Exceptions.message.Message.SQL(SQL.Exception).org.hd.sql.message。 org.h2.message.DbException.get(DbException.java:179)的org.h2.message.DbException.get(DbException.java:155)org.h2.schema.Schema.getTableOrView(Schema的java:345) .java:437),位于org.h2.command.Parser.readTableOrView(Parser.java:5371),位于org.h2.command.Parser.readTableFilter(Parser.java:1257),位于org.h2.command.Parser.parseSelectSimpleFromPart( 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。在org.h2.command.Par处解析(Parser.java:317) ser.parse(Parser.java:289) at org.h2.command.Parser.prepareCommand(Parser.java:254) at org.h2.engine.Session.prepareLocal(Session.java:560) at org.h2.engine.Session.prepareCommand(Session.java:501) at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1201) at org.h2.jdbc.JdbcPreparedStatement.(JdbcPreparedStatement.java:73) at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:289) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:145) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:171) ... 17 more org.h2.command.Parser.prepareCommand(Parser.java:254)位于org.h2.engine.Session.prepareLocal(Session.java:560)位于org.h2.engine.ser.parse(Parser.java:289) org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1201)的.Session.prepareCommand(Session.java:501)org.h2.jdbc的org.h2.jdbc.JdbcPreparedStatement。(JdbcPreparedStatement.java:73)的。 org.hibernate.engine.jdbc.internal.StatementPreparerImpl $ 5.doPrepare(StatementPreparerImpl.java:145)上的.JdbcConnection.prepareStatement(JdbcConnection.java:289)在org.hibernate.engine.jdbc.internal.StatementPreparerImpl $ StateprePreement模板上的。 StatementPreparerImpl.java:171)...还有17个

Hibernate Config: 休眠配置:

<?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 class: 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;
    }
}

Main class: 主班:

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();

        }

I've tried to edit configuration. 我尝试编辑配置。 So I add: 所以我添加:

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

And make empty database. 并制作空数据库。 What is strange is database and table created by Java after opening in H2 Console is not visible. 奇怪的是,在H2 Console中打开后,Java创建的数据库和表不可见。 So that can be the problem. 这样就可能是问题。 I wanted to put a lot of data, so how to make it not from java to be visible there? 我想放入很多数据,那么如何使它不在Java中可见呢?

Thanks to @JB Nizet I see my error. 感谢@JB Nizet,我看到了我的错误。 I was copying database to project path, where my path "~/database" shows to database in user folder, and I was copying it to project folder so I should use "./database" . 我正在将数据库复制到项目路径,其中路径“〜/ database”显示到用户文件夹中的数据库,并且正在将其复制到项目文件夹,因此我应该使用“ ./database”。 Still if I want to make runnable I would need to use user location to have it rightly working on other machines. 仍然,如果我想使之可运行,就需要使用用户位置使其在其他计算机上正确运行。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM