Мне нужна помощь.Я понятия не имею, что не так с этим проектом.Я не могу подключиться к базе данных h2.Я получаю ошибку, даже если я не сохраняю какой-либо объект, просто закрываю соединение.
Извините, я знаю, что его задавали несколько раз, но ни один из ответов не подходит для моего случая.
Ошибка, которую я получаю:
04 марта,2019 23:00:24 PM org.hibernate.Version Log Информация о версии: HHH000412: Hibernate Core {5.2.12.Final} 04 марта 2019 г. 23:00:24 org.hibernate.cfg.Environment INFO: HHH000206: hibernate.propertiesне найден 04 марта 2019 23:00:24 вечера org.hibernate.boot.jaxb.internal.stax.LocalXmlResourceResolver resolEntity WARN: HHH90000012: Распознанное устаревшее пространство имен спящего режима http://hibernate.sourceforge.net/hibernate-configuration. Вместо этого используйте пространство имен http://www.hibernate.org/dtd/hibernate-configuration.Поддержка устаревших пространств имен DTD / XSD может быть удалена в любое время.04 марта 2019 г. 23:00:24 вечера org.hibernate.annotations.common.reflection.java.JavaReflectionManager ИНФОРМАЦИЯ: HCANN000001: Hibernate Commons Annotations {5.0.1.Final} 04 марта 2019 г. 23:00:25 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure WARN: HHH10001002: использование встроенного пула соединений Hibernate (не для производственного использования!) org.hibernate.service.spi.ServiceException: невозможно создать запрошенную службу [org.hibernate.engine.jdbc.env.spi.hibernate.service.internal.конфigureService (StandardServiceRegistryImpl.java:94) в org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService (AbstractServiceRegistryImpl.java:242) в org.hibernate.service.internal.AbstractSerg.jergergSerg.boot.model.process.spi.MetadataBuildingProcess.handleTypes (MetadataBuildingProcess.java:352) в org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete (MetadataBuildingPromo...process. spi: 87) в org.hibernate.cfg.Configuration.buildSessionFactory (Configuration.java:691) в org.hibernate.cfg.Configuration.buildSessionFactory (Configuration.java:726) в orm.hibernate.employees.HibernateUtils. (HibernateUtils.java.: 13) вorm.hibernate.employees.EmployeeRepository.addNewEmployee (EmployeeRepository.java:16) в orm.hibernate.employees.EmployeesApp.main (EmployeesApp.java:21). Вызывается: org.hibernate.boot.registry.classloadL.Невозможно загрузить класс [org.h2.Driver] по адресу org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName (ClassLoaderServiceImpl.java:348) в org.hibernate.engine.jdbc.connections.inagerrinePrimPrim_PriverPriverMid:: 100) в org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure (DriverManagerConnectionProviderImpl.java:72) вorg.hibernate.getService (AbstractServiceRegistryImpl.java:210) в org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess (JdbcEnvironmentInitiator.java:145) в org.hibernate.environment.injbjava: 66) в org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService (JdbcEnvironmentInitiator.java:35) в org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.inavaService (org) ing.jpg.hibernate.service.internal.AbstractServiceRegistryImpl.createService (AbstractServiceRegistryImpl.java:259) ... еще 16 причин: java.lang.ClassNotFoundException: Не удалось загрузить запрошенный класс: org.h2.Driver в org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl $ AggregatedClassLoader.findClass (ClassLoaderServiceImpl.java:336) в java.lang.ClassLoader.o424) в java.lang.ClassLoader.loadClass (ClassLoader.java:357) в java.lang.Class.forName0 (собственный метод) в java.lang.Class.forName (Class.java:348) в org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName (ClassLoaderServiceImpl.java:345) ... еще 28
##### Начальное создание SessionFactory не удалось.org.hibernate.service.spi.ServiceException: невозможно создать
запрошенный сервис [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] Исключение в потоке "main" java.lang.ExceptionInInitializerError: Ошибка подключения к базе данных!в orm.hibernate.employees.HibernateUtils. (HibernateUtils.java:17) в orm.hibernate.employees.EmployeeRepository.addNewEmployee (EmployeeRepository.java:16) в orm.hibernate.employees.EmployeesA21.jj.jpg ()
Процесс завершен с кодом завершения 1
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>brudnopis.com</groupId>
<artifactId>brudnopis2</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.12.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.196</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Hibernate Utils класс:
public class HibernateUtils {
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
} catch (Throwable ex) {
ex.printStackTrace();
System.err.println("########### Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError("Connection to database error!");
}
}
public static Session openSession() throws Exception {
Session session;
try {
session = sessionFactory.openSession();
} catch (Exception e) {
e.printStackTrace();
throw new Exception("Connection to database error!");
}
return session;
}
public static void closeSession(){
sessionFactory.close();
}
}
Репозиторий
public class EmployeeRepository {
// Create
public static void addNewEmployee(EmployeeEntity employee){
Session session = null;
try {
session = HibernateUtils.openSession();
session.getTransaction().begin();
session.saveOrUpdate(employee);
session.getTransaction().commit();
}catch (Exception e){
e.printStackTrace();
}finally {
if (session != null && session.isOpen()) {
session.close();
}
}
}
// Read
public static List<EmployeeEntity> listAllEmployees(){
List<EmployeeEntity> listEmployees = new ArrayList<EmployeeEntity>();
Session session = null;
try {
session = HibernateUtils.openSession();
listEmployees = session.createQuery("SELECT e FROM EmployeeEntity e").getResultList();
} catch (Exception e) {
e.printStackTrace();
}finally {
if (session != null && session.isOpen()) {
session.close();
}
}
return listEmployees;
}
// Update
public static void editExistingEmployee(EmployeeEntity employee){
Session session = null;
try {
session = HibernateUtils.openSession();
session.getTransaction().begin();
session.merge(employee);
session.getTransaction().commit();
}catch (Exception e){
e.printStackTrace();
}finally{
if (session != null && session.isOpen()) {
session.close();
}
}
}
//Delete
public static void deleteEmployee(int idToDelete){
Session session = null;
try {
session = HibernateUtils.openSession();
EmployeeEntity employeeToDelete = session.find(EmployeeEntity.class, idToDelete);
session.getTransaction().begin();
session.remove(employeeToDelete);
session.getTransaction().commit();
}catch (Exception e){
e.printStackTrace();
}finally{
if (session != null && session.isOpen()) {
session.close();
}
}
}
}
Класс сущности:
@Entity
@Table(name = "employees")
public class EmployeeEntity {
@Id
@Column(name = "id")
private int id;
@Column(name = "employee_id")
private int employeeId;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
public EmployeeEntity(int id, int employeeId, String firstName, String lastName) {
this.id = id;
this.employeeId = employeeId;
this.firstName = firstName;
this.lastName = lastName;
}
public EmployeeEntity(){}
@Override
public String toString() {
return "EmployeeEntity{" +
"id=" + id +
", employeeId=" + employeeId +
", firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getEmployeeId() {
return employeeId;
}
public void setEmployeeId(int employeeId) {
this.employeeId = employeeId;
}
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;
}
}
Основной класс:
public class EmployeesApp {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
System.out.println("Menu");
System.out.println("====");
System.out.println("1. Write data to database");
System.out.println("2. Read data from database");
System.out.println("3. Exit");
int userChoice = sc.nextInt();
switch(userChoice){
case 1:
EmployeeEntity employee1 = new EmployeeEntity(1,10001,"Jon", "Doe");
EmployeeRepository.addNewEmployee(employee1);
System.out.println(EmployeeRepository.listAllEmployees());
case 3:
break;
}
HibernateUtils.closeSession();
}
}
Структура проекта: