could not extract ResultSet при удалении пользователя
Задача: написать программу на java для коннекта с БД mysql использую hibernate
Создание класса пользователей, которые нужно помещать в таблицу: (геттеры сеттеры не пишу, формируются идеей)
import javax.persistence.*;
@Entity
@Table(name = "User")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@Column(name = "lastName")
private String lastName;
@Column(name = "age")
private Byte age;
public User() {
}
public User(String name, String lastName, Byte age) {
this.name = name;
this.lastName = lastName;
this.age = age;
}
Создание коннекта с БД делается отдельным классом:
public class Util {
private static SessionFactory sessionFactory;
public static SessionFactory getSessionFactory() {
if (sessionFactory == null) {
try {
Configuration configuration = new Configuration();
Properties settings = new Properties();
settings.put(Environment.DRIVER, "com.mysql.cj.jdbc.Driver");
settings.put(Environment.URL, URL);
settings.put(Environment.USER, USERNAME);
settings.put(Environment.PASS, PASSWORD);
settings.put(Environment.DIALECT, "org.hibernate.dialect.MySQL5Dialect");
settings.put(Environment.SHOW_SQL, "true");
settings.put(Environment.CURRENT_SESSION_CONTEXT_CLASS, "thread");
settings.put(Environment.HBM2DDL_AUTO, "");
configuration.setProperties(settings);
configuration.addAnnotatedClass(User.class);
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties()).build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
System.out.println(ANSI_GREEN + "Настройка конфигурации успешна" + ANSI_RESET);
} catch (Exception e) {
System.out.println(ANSI_RED + "Ошибка конфигурации" + ANSI_RESET);
}
}
return sessionFactory;
}
Запрос создания таблицы:
String create = "CREATE TABLE IF NOT EXISTS users " +
"(id LONG NOT NULL AUTO_INCREMENT PRIMARY KEY, " +
"name VARCHAR(50) NOT NULL, lastName VARCHAR(50) NOT NULL, " +
"age BYTE NOT NULL)";
ПРОБЛЕМА:
Методы удаление пользователя по ID и вывода всей таблицы в список
public void removeUserById(long id) {
try {
Session session = getSessionFactory().openSession();
session.beginTransaction();
User del = session.get(User.class, id);
session.delete(del);
session.getTransaction().commit();
session.close();
System.out.println(ANSI_GREEN + "Удаление пользователя успешно!" + ANSI_RESET);
} catch (Exception e) {
System.out.println(ANSI_RED + "Пользователь не был удален" + ANSI_RESET);
System.out.println("Because you have" + ANSI_RED + " EXCEPTION " + ANSI_RESET + e);
}
}
@Override
public List<User> getAllUsers() {
String list = "from User";
List<User> fake = new ArrayList<>();
try {
Session session = getSessionFactory().openSession();
Transaction transaction = session.beginTransaction();
List<User> ls = session.createQuery("from User")
.getResultList();
for(User l : ls){
System.out.println(l);
}
session.getTransaction().commit();
session.close();
System.out.println(ANSI_GREEN + "Вывод данных успешен!" + ANSI_GREEN);
} catch (Exception e) {
System.out.println(ANSI_RED + "Вывод данных не выполнен!" + ANSI_RESET);
System.out.println("Because you have" + ANSI_RED + " EXCEPTION " + ANSI_RESET + e);
}
return fake;
}
Данные из терминала:
июл. 10, 2023 12:21:33 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate ORM core version 5.6.3.Final
июл. 10, 2023 12:21:33 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
июл. 10, 2023 12:21:33 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [com.mysql.cj.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/mydbtest]
июл. 10, 2023 12:21:33 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {password=****, user=root}
июл. 10, 2023 12:21:33 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
июл. 10, 2023 12:21:33 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
июл. 10, 2023 12:21:34 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
Настройка конфигурации успешна
Таблица успешно создана!
Добавление выполнено!
Добавление выполнено!
Добавление выполнено!
Добавление выполнено!
Hibernate: select user0_.id as id1_0_0_, user0_.age as age2_0_0_, user0_.lastName as lastname3_0_0_, user0_.name as name4_0_0_ from User user0_ where user0_.id=?
июл. 10, 2023 12:21:34 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 1146, SQLState: 42S02
июл. 10, 2023 12:21:34 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Table 'mydbtest.user' doesn't exist
июл. 10, 2023 12:21:34 PM org.hibernate.event.internal.DefaultLoadEventListener doOnLoad
INFO: HHH000327: Error performing load command
org.hibernate.exception.SQLGrammarException: could not extract ResultSet
at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:37)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:67)
at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.getResultSet(AbstractLoadPlanBasedLoader.java:390)
at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeQueryStatement(AbstractLoadPlanBasedLoader.java:163)
at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:104)
at org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.load(AbstractLoadPlanBasedEntityLoader.java:285)
at org.hibernate.persister.entity.AbstractEntityPersister.doLoad(AbstractEntityPersister.java:4521)
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4511)
at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:571)
at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:539)
at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:208)
at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:327)
at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:108)
at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:74)
at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:118)
at org.hibernate.internal.SessionImpl.fireLoadNoChecks(SessionImpl.java:1226)
at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1215)
at org.hibernate.internal.SessionImpl.access$2100(SessionImpl.java:201)
at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.doLoad(SessionImpl.java:2830)
at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.lambda$load$1(SessionImpl.java:2807)
at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.perform(SessionImpl.java:2763)
at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2807)
at org.hibernate.internal.SessionImpl.get(SessionImpl.java:1023)
at jm.task.core.jdbc.dao.UserDaoHibernateImpl.removeUserById(UserDaoHibernateImpl.java:101)
at jm.task.core.jdbc.service.UserServiceImpl.removeUserById(UserServiceImpl.java:25)
at jm.task.core.jdbc.Main.main(Main.java:22)
Caused by: java.sql.SQLSyntaxErrorException: Table 'mydbtest.user' doesn't exist
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:1003)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:57)
... 24 more
Пользователь не был удален
Because you have EXCEPTION org.hibernate.exception.SQLGrammarException: could not extract ResultSet
Hibernate: select user0_.id as id1_0_, user0_.age as age2_0_, user0_.lastName as lastname3_0_, user0_.name as name4_0_ from User user0_
Вывод данных не выполнен!
Because you have EXCEPTION javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
июл. 10, 2023 12:21:34 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 1146, SQLState: 42S02
июл. 10, 2023 12:21:34 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Table 'mydbtest.user' doesn't exist
Таблица успешно удалена!
Методы создания таблицы, добавления пользователя и удаление таблица выполняется успешно, ошибка появляется на методе удаления пользователя по id и вывода всей таблица в терминал Что пошло не так? Из-за чего возникает ошибка?