簡體   English   中英

無法將 H2 DB 與 Hibernate 連接

[英]Unable to connect H2 DB with Hibernate

我正在嘗試在使用 hibernate 時創建一個小型 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。

hibernate.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 數據庫用戶界面

如果創建了臨時數據庫,請檢查日志。 如果是這樣 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 進行連接,還會顯示測試連接工作和表格:

在此處輸入圖像描述

您可能需要降級您的版本並使用以下

<dependency>
     <groupId> com.h2database</groupId>
     <artifactId>h2</artifactId>
     <version>1.4.193</version>
 </dependency>
  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

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

在此處輸入圖像描述

缺少 JPA 依賴項。 因此,添加以下依賴項。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

這是 H2 數據庫的默認登錄名。 確認您的詳細信息是否匹配

在此處輸入圖像描述

在上面的屏幕截圖中將 testdb 更改為測試

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

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

在此處輸入圖像描述

我有同樣的問題。 幾天后解決了:)這三種方式彼此相同。

  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 desiredName 並在控制台中使用: jdbc:h2:mem:desiredName作為名稱

  2. 通過閱讀日志使用生成的名稱。 它有時會有所不同。 H2 console available at '/h2'. Database available at 'jdbc:h2:mem:desiredName' H2 console available at '/h2'. Database available at 'jdbc:h2:mem:desiredName'如果在應用程序屬性中未指定名稱,則后面可能有 16 個字母。

玩得開心。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM