2

我正在尝试在使用休眠时创建一个小型 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>  

这是包含所有 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>

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

雇员.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;    
}    
}

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

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

}    
} 

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

H2 数据库用户界面

4

7 回答 7

9

如果创建了临时数据库,请检查日志。如果是这样,则 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 进行连接,则会显示测试连接工作和表格:

在此处输入图像描述

于 2020-05-28T07:26:03.013 回答
6

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

<dependency>
     <groupId> com.h2database</groupId>
     <artifactId>h2</artifactId>
     <version>1.4.193</version>
 </dependency>
于 2020-01-19T10:41:43.190 回答
4
  1. 您必须在 pom.xml 中添加以下两个依赖项

`

<dependency>
     <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>       
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>

`

  1. 然后通过在 application.properties 文件中添加以下行来启用 H2 控制台

spring.h2.console.enabled=true

  1. 之后运行您的应用程序并打开 Rest 端点“/h2-console”

喜欢:http://localhost:9090/h2-console/

  1. 现在从控制台复制您的 JDBC URL

喜欢:数据库位于 'jdbc:h2:mem:b61c56f6-93f3-4324-8b4a-4ead06f669d1'

在此处输入图像描述

  1. 复制并粘贴到您的 H2 控制台中,然后单击“连接”

在此处输入图像描述


您还可以通过在 application.properties 文件中添加以下配置来手动配置所有内容:

#---------------------------------DATABASE CONFIG-----------------------

spring.h2.console.enabled=true

spring.datasource.url=jdbc:h2:mem:person_db
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=root
spring.datasource.password=root

spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

#---------------------------------------------------------------

在此处输入图像描述

于 2020-09-26T06:53:35.763 回答
2

缺少 JPA 依赖项。因此,添加以下依赖项。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
于 2020-03-15T16:53:56.643 回答
1

这是 H2 数据库的默认登录名。确认您的详细信息是否匹配

在此处输入图像描述

在上面的屏幕截图中将 testdb 更改为测试

于 2019-10-28T04:23:23.340 回答
0

我有同样的问题。几天后解决了:)这3种方式彼此相同。

  1. 降级你的 H2 依赖。如果没有提到任何版本,maven 会获取最新版本,因此您可能需要明确提及以下任何版本,如下1.4.195 所示:
<dependency>
     <groupId> com.h2database</groupId>
     <artifactId>h2</artifactId>
     <version>1.4.193</version>
 </dependency>
  1. 在您的应用程序属性中写下您要连接的数据库的全名。 spring.datasource.url=jdbc:h2:mem:desiredName并在控制台中使用:jdbc:h2:mem:desiredName作为名称

  2. 通过阅读日志使用生成的名称。它有时会有所不同。H2 console available at '/h2'. Database available at 'jdbc:h2:mem:desiredName'如果应用程序属性中未指定名称,则后面可能有 16 个字母。

玩得开心。

于 2020-08-17T16:57:06.650 回答
0

您可能需要将以下行添加到 application.properties 文件中。

spring.datasource.url= jdbc:h2:mem:test

在此处输入图像描述

于 2020-07-24T08:18:05.820 回答