[英]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。
您可能需要降級您的版本並使用以下
<dependency>
<groupId> com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.193</version>
</dependency>
`
<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>
`
spring.h2.console.enabled=true
喜歡:http://localhost:9090/h2-console/
喜歡:數據庫位於 'jdbc:h2:mem:b61c56f6-93f3-4324-8b4a-4ead06f669d1'
您還可以通過在 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>
我有同樣的問題。 幾天后解決了:)這三種方式彼此相同。
1.4.195
以下的任何版本,如下所示:<dependency>
<groupId> com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.193</version>
</dependency>
在您的應用程序屬性中寫下您要連接的數據庫的全名。 spring.datasource.url=jdbc:h2:mem:desiredName
desiredName 並在控制台中使用: jdbc:h2:mem:desiredName
作為名稱
通過閱讀日志使用生成的名稱。 它有時會有所不同。 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.