Почему @Entity не создает таблицу в бд

пишу не так давно на java. Создал проект https://github.com/Nubiroed/Game, вроде подключил mySql бд. Аннотация @Entity, должна создавать таблицу из сущности Тут свидетельство что вроде должна

(На другом проекте с spring, создается нормально, возможно дело в spring, но вроде созданием таблицы занимается не он.) Но, таблица не создается. Ошибок нет. Получить из бд сущность(или класс, пока не силен в терминологии) с помощью введите сюда описание изображения

у меня получилось, однако она тоже не обновляется автоматически(update вместо create я использовал, результат не меняется). Вопрос: почему не создается таблица? Заранее: я понимаю, что id в User должно быть Long, но chatGpt предложил такой пример(Long не работал так же). Также, скорее всего ошибка простейшая, но лично я не смог ее найти(я искал решение данного вопроса, в том числе на данном ресурсе). Ide intellij idea

Появились новые ошибки, скорее всего связаны(не нашел чего - то похожего на спойлер или скрывающего текст) `апр. 06, 2024 10:46:44 PM org.hibernate.Version logVersion INFO: HHH000412: Hibernate ORM core version 6.5.0.CR1 апр. 06, 2024 10:46:44 PM org.hibernate.cache.internal.RegionFactoryInitiator initiateService INFO: HHH000026: Second-level cache disabled апр. 06, 2024 10:46:44 PM org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator initiateService WARN: HHH000181: No appropriate connection provider encountered, assuming application will be supplying connections апр. 06, 2024 10:46:44 PM org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator getJdbcEnvironmentUsingJdbcMetadata WARN: HHH000342: Could not obtain connection to query metadata java.lang.UnsupportedOperationException: The application must supply JDBC connections at org.hibernate.engine.jdbc.connections.internal.UserSuppliedConnectionProviderImpl.getConnection(UserSuppliedConnectionProviderImpl.java:44) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:446) at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:61) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentUsingJdbcMetadata(JdbcEnvironmentInitiator.java:294) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:122) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:76) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:130) at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:238) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215) at org.hibernate.boot.model.relational.Database.(Database.java:45) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:221) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:189) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:171) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:129) at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:449) at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:101) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:966) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1016) at org.example.Main.main(Main.java:13)

Exception in thread "main" org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided) at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:276) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:238) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215) at org.hibernate.boot.model.relational.Database.(Database.java:45) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:221) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:189) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:171) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:129) at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:449) at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:101) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:966) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1016) at org.example.Main.main(Main.java:13) Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided) at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:191) at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:87) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentWithDefaults(JdbcEnvironmentInitiator.java:156) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentUsingJdbcMetadata(JdbcEnvironmentInitiator.java:366) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:122) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:76) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:130) at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ... 12 more `.


Ответы (1 шт):

Автор решения: Yustas

Вашему вопросу, кто-то поставил -1 и ушел, без объяснения причин. Это с моей точки зрения нехорошо, поэтому попробую объяснить, хотя бы некоторые причины, я (честно говоря, давно не пользовался непосредственно Hibernate, так как сейчас без Spring'a (в java разработке) почти никуда, а Spring имеет Hibernate "под капотом" и удобнее пользоваться data-jpa, поэтому если я скажу что-то ошибочно, простите меня старика). Итак:

  1. В файле hibernate.cfg.xml необходимо написать маппинги для всех используемых сущностей, т.е. для класса User, это будет:
    <mapping class="model.User"></mapping>
  1. Насколько я помню, я тоже сталкивался с проблемой подключения к mySQL при работе с Hibernate, сейчас не помню почему, но просто указание localhost, порта и название БД не работало, но сработало вот так в файле hibernate.cfg.xml:
    <property name="connection.url">jdbc:mysql://localhost:3306/<db_name_here>?useSSL=false&amp;serverTimezone=Europe/Moscow&amp;useUnicode=true&amp;characterEncoding=utf8</property>
  1. В методе main Вам необходимо написать код для подключения и выполнения транзакций, попробуйте, например так:
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
                .configure("hibernate.cfg.xml").build();
        Metadata metadata = new MetadataSources(registry).getMetadataBuilder().build();
        SessionFactory sessionFactory = metadata.getSessionFactoryBuilder().build();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
  1. После запуска проекта, зайдите в БД и убедитесь, что таблица User создана. Лучше делать это в режиме дебага.

А вот этот участок кода, вставляет строку в уже созданную таблицу и закрывает транзакцию

        User user  = new User();
        user.setId(1);
        user.setEmail("23");
        user.setMail("2552");
        session.save(user);
        session.getTransaction().commit();

        sessionFactory.close();

Мне очень помогла книга: "Бауэр К., Кинг Г., Грегори Г. 'Java Persistence API и Hibernate'", настоятельно рекомендую ее прочитать.

Вот сейчас еще припомнил, что я использовал пятый Hibernate и он почему-то не дружил с коннектором mysql-connector-j , попробуйте в pom.xml попробовать (для 8 MySQL)

  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.15</version>
  </dependency>
→ Ссылка