Как установить соединение с базой данных с помощью Hibernate, Java и Gradle?

#java #hibernate #gradle #orm

Вопрос:

Я не могу подключиться к своей базе данных с помощью Hibernate и Gradle с Java, и я получаю ошибку ниже. Что я делаю не так?

ошибка: не удается получить доступ к ссылочному сеансу session = SessionFactory.OpenSession(); ^ файл класса для javax.именования.Ссылка не найдена

Основной Класс

 public class App{   public static void main(String[] args) {  try {  StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();  Metadata meta = new MetadataSources(ssr).getMetadataBuilder().build();  SessionFactory sessions = meta.buildSessionFactory();  Session session = sessions.openSession();  Transaction t = session.beginTransaction();  t.commit();  session.close();   }catch (Exception e){  e.printStackTrace();  }  } }  

module-info.java

 module PhoneBook {  requires javafx.controls;  requires javafx.fxml;  requires javafx.graphics;  requires org.hibernate.orm.core;    exports app; }  

Зависимости Gradle

 implementation 'mysql:mysql-connector-java:8.0.25' implementation 'org.hibernate:hibernate-core:5.5.7.Final'  

Комментарии:

1. Просто к вашему сведению, но добавление версий для тегов, которые вы перечисляете, всегда полезно всем, кто хочет помочь!

Ответ №1:

Я предполагаю, что вы используете Java 9 или выше? Если это так, то, похоже, вам не хватает директивы java.naming; в module-info.java модуля, который имеет доступ к ссылкам. Добавление этой директивы должно исправить это:

 module YourModule {  requires java.naming;  ... }  

Комментарии:

1. я пробовал это раньше, и он дал мне еще одну ошибку Caused by: java.lang.ClassNotFoundException: java.sql.SQLException

2. Тогда ваши версии несовместимы с вашим соединителем msSQL, гибернацией и JAVA (я не проверял), или ваши пути к классам настроены неправильно, или в ваших объявлениях есть опечатки. Вам нужно проверить все три.

3. @Moka Вам также нужно будет добавить requires java.sql . Возможно, вам было бы лучше не использовать модульную Java и вернуться к простой старой Java на основе путей к классам. Насколько я знаю, Hibernate еще не модулирован, как и MySQL Connector/J, так что вы, скорее всего, будете играть в крота для каждой зависимости.

4. @Mark Tottenveel Я не думал о возможных проблемах с модульным кодом, да, было бы намного проще использовать JAVA 8.

5. Спасибо, ребята, я удалил модуль и использовал старую версию hibernate, и теперь она работает