Почему не получается сделать запрос в БД и происходит org.hibernate.HibernateException?
В прошлый раз я задал вопрос, где я не мог решить проблему с resources. Решил проблему вчера, сегодня не могу понять в чем проблема, почему на java не могу сделать запрос. В видео делал как у автора:
- Создал БД.
- Создал таблицу.
- Создал класс Person.
- Затем в другом классе соединил с БД.
- Создал объект класса и всё сохранил в сессию и закрыл сессию.
Однако не работает так как нужно. Cкрин прикладываю из видео человека, у меня такого нет как у него в видео. Я даже разные версии hibernate пробовал, не помогает.
Прикладываю код, зависимости, конфигурационный файл и логи.
Код класса Person:
package test.learn.hibernate;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
@Table (name = "Person")
public class Person {
@Id
private int id;
@Column (name = "name")
private String name;
@Column (name = "surname")
private String surname;
public Person () {}
public String getName () {
return name;
}
public void setName (String name) {
this.name = name;
}
public String getSurname () {
return surname;
}
public void setSurname (String surname) {
this.surname = surname;
}
public void setId (int id) {
this.id = id;
}
public int getId () {
return id;
}
public String toString () {
return this.id +": " + this.name + ": " + this.surname;
}
}
Код который связан с сессией:
package test.learn.hibernate;
import org.hibernate.cfg.*;
import org.hibernate.*;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println("Project started...");
Configuration cfg = new Configuration ();
cfg.configure();
SessionFactory factory = cfg.buildSessionFactory();
cfg.addAnnotatedClass(Person.class);
System.out.println(factory);
Person person = new Person ();
person.setId(1);
person.setName("John");
person.setSurname("Smith");
System.out.println(person);
Session session = factory.getCurrentSession();
Transaction tx = session.beginTransaction();
session.persist(person);
System.out.println(person);
session.getTransaction();
tx.commit();
session.close();
}
}
Мой 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>test.learn</groupId>
<artifactId>hibernate</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hibernate</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.2.4.Final</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.32</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>ejb3-persistence</artifactId>
<version>1.0.2.GA</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>3.5.6-Final</version>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
Мой конфигурационный файл:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name = "hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name = "hibernate.connection.driver_class">
com.mysql.cj.jdbc.Driver
</property>
<!-- Assume students is the database name -->
<property name = "hibernate.connection.url">
jdbc:mysql://localhost:3306/person
</property>
<property name = "hibernate.connection.username">
root
</property>
<property name = "hibernate.connection.password">
root
</property>
<property name = "show_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<mapping class = "test.learn.hibernate.Person"/>
</session-factory>
</hibernate-configuration>
Логи:
Project started...
июн. 16, 2023 4:47:28 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate ORM core version 6.2.4.Final
июн. 16, 2023 4:47:28 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000406: Using bytecode reflection optimizer
июн. 16, 2023 4:47:28 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using built-in connection pool (not intended for production use)
июн. 16, 2023 4:47:28 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: Loaded JDBC driver class: com.mysql.cj.jdbc.Driver
июн. 16, 2023 4:47:28 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001012: Connecting with JDBC URL [jdbc:mysql://localhost:3306/person]
июн. 16, 2023 4:47:28 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {password=****, user=root}
июн. 16, 2023 4:47:28 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
июн. 16, 2023 4:47:28 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>
INFO: HHH10001115: Connection pool size: 20 (min=1)
июн. 16, 2023 4:47:28 PM org.hibernate.bytecode.internal.BytecodeProviderInitiator buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : bytebuddy
июн. 16, 2023 4:47:29 PM org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService
INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
org.hibernate.internal.SessionFactoryImpl@2e179f3e
1: John: Smith
Exception in thread "main" org.hibernate.HibernateException: No CurrentSessionContext configured
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:601)
at test.learn.hibernate.App.main(App.java:32)
