无法将 H2 DB 与 Hibernate 连接

cod*_*123 2 java hibernate h2db

我正在尝试在使用休眠时创建一个小的 H2 内存数据库。但该表未显示在 H2 UI 中。我不确定是否需要在配置中包含其他任何内容。

这是代码: 下面是为 hibernate 和 h2 DB 添加的依赖项。

pom.xml

<dependency>  
    <groupId>org.hibernate</groupId>  
    <artifactId>hibernate-core</artifactId>  
    <version>5.3.1.Final</version>  
</dependency> 

<dependency>  
    <groupId>com.h2database</groupId>  
    <artifactId>h2</artifactId>  
    <scope>runtime</scope>
    <version>1.4.200</version> 

</dependency>  
Run Code Online (Sandbox Code Playgroud)

这是包含所有 H2 DB 详细信息的配置 XML。

休眠文件.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE hibernate-configuration PUBLIC  
        "-//Hibernate/Hibernate Configuration DTD 5.3//EN"  
        "http://www.hibernate.org/dtd/hibernate-configuration-5.3.dtd">  

<hibernate-configuration>
    <session-factory>
        <property name="connection.driver_class">org.h2.Driver</property>
        <property name="connection.url">jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</property>
        <property name="dialect">org.hibernate.dialect.H2Dialect</property>
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">create</property>
        <mapping class="HiberDemo.Employee"/>
    </session-factory>
</hibernate-configuration>
Run Code Online (Sandbox Code Playgroud)

这将与其他列一起创建表。

雇员.java

package HiberDemo;

import javax.persistence.Entity;  
import javax.persistence.Id;  
import javax.persistence.Table;  

@Entity  
@Table(name= "emp500")   
public class Employee {    

@Id   
private int id;    
private String firstName,lastName;    

public int getId() {    
    return id;    
}    
public void setId(int id) {    
    this.id = id;    
}    
public String getFirstName() {    
    return firstName;    
}    
public void setFirstName(String firstName) {    
    this.firstName = firstName;    
}    
public String getLastName() {    
    return lastName;    
}    
public void setLastName(String lastName) {    
    this.lastName = lastName;    
}    
}
Run Code Online (Sandbox Code Playgroud)

这是为了将一些数据存储到表中。

存储数据.java

package HiberDemo;

import java.sql.DriverManager;
import java.sql.SQLException;

import org.hibernate.Session;    
import org.hibernate.SessionFactory;    
import org.hibernate.Transaction;  
import org.hibernate.boot.Metadata;  
import org.hibernate.boot.MetadataSources;  
import org.hibernate.boot.registry.StandardServiceRegistry;  
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;

import com.sun.corba.se.pept.transport.Connection;  


public class StoreData {    
public static void main(String[] args) throws SQLException {    


    StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();  
    Metadata meta = new MetadataSources(ssr).getMetadataBuilder().build();  

SessionFactory factory = meta.getSessionFactoryBuilder().build();  
Session session = factory.openSession();  
Transaction t = session.beginTransaction();   



    Employee e1=new Employee();    
    e1.setId(101);    
    e1.setFirstName("abc");    
    e1.setLastName("xyz");    

    session.save(e1);  
    t.commit();  
    System.out.println("successfully saved");    
    factory.close();  
    session.close();   
   // conn.close();

}    
} 
Run Code Online (Sandbox Code Playgroud)

这是我创建的表没有显示的 H2 DB UI。

H2 数据库用户界面

小智 8

如果创建了临时数据库,请检查日志。如果是这样,则 url 将在日志中进行控制台:

2020-05-28 12:20:01.280 INFO 26579 --- [restartedMain] osbah2.H2ConsoleAutoConfiguration:H2 控制台可在'/h2-console'使用。数据库位于“jdbc:h2:mem:b9994036-2f8e-4d00-8d7d-012a270661fa”

如果您尝试使用 jdbc:h2:mem:b9994036-2f8e-4d00-8d7d-012a270661fa 进行连接,还会显示测试连接工作和表格:

在此处输入图片说明


小智 6

您可能需要降级您的版本并使用以下

<dependency>
     <groupId> com.h2database</groupId>
     <artifactId>h2</artifactId>
     <version>1.4.193</version>
 </dependency>
Run Code Online (Sandbox Code Playgroud)