Hibernate :Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

0

Własnie zacząłem swoją przygodę z Hibernate i już na wstępie nie chce się skompilować:D
Stworzyłem lokalną bazę na MySQL 8.0
Stworzyłem plik peristence.xml w katalogu META-INF a że korzystam z mavena to dodałem ten folder do src/main/resources
Do POMa wrzuciłem hibernate-agroal v5.3.6.Final i mysql-connector-java 8.0.12

peristence.xml (którego znalazłem w internecie)wygląda następująco:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
	version="2.0">
	<persistence-unit name="myDatabase"
		transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
		<properties>
		 <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
		 <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/mojaBaza"/>
         <property name="javax.persistence.jdbc.user" value="tutorial"/>
         <property name="javax.persistence.jdbc.password" value="password"/>
         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/>
         <property name="hibernate.hbm2ddl.auto" value="create"/>
		</properties>
	</persistence-unit>
</persistence>

Klasa Main:

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class Main {
	public static void main(String[] args) {
		EntityManagerFactory entityMenagerFactory = Persistence.createEntityManagerFactory("myDatabase");
		EntityManager entityMenager = entityMenagerFactory.createEntityManager();
		
		entityMenager.close();
		entityMenagerFactory.close();
	}
}

Tutoriale na których się wzorowałem były na Hibernate v4... a MySQL na v5.. i tam to wszystko chodziło
U mnie tak jak widzać w pomie 8.0 i 5.3.6

w tutku provider był

<provider>org.hibernate.jpa.HibernatePersistence</provider>

a w nowym hibernate powinno być

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

gdyż hibernate entity menager został w nowej wersji przeniesiony do core

kodu wygenerowany w trakcie próby :

paź 02, 2018 10:47:43 AM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
INFO: HHH000204: Processing PersistenceUnitInfo [
	name: myDatabase
	...]
paź 02, 2018 10:47:44 AM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.3.6.Final}
paź 02, 2018 10:47:44 AM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
paź 02, 2018 10:47:45 AM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.0.4.Final}
paź 02, 2018 10:47:45 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
Exception in thread "main" org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
	at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:275)
	at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237)
	at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)
	at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152)
	at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286)
	at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243)
	at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)
	at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:179)
	at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:119)
	at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:904)
	at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:935)
	at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
	at pl.tomek.sut.Main.main(Main.java:9)
Caused by: org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [com.mysql.cj.jdbc.Driver]
	at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:354)
	at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.loadDriverIfPossible(DriverManagerConnectionProviderImpl.java:163)
	at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildCreator(DriverManagerConnectionProviderImpl.java:119)
	at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildPool(DriverManagerConnectionProviderImpl.java:103)
	at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:75)
	at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:100)
	at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:246)
	at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)
	at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:145)
	at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66)
	at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
	at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:94)
	at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263)
	... 14 more
Caused by: java.lang.ClassNotFoundException: Could not load requested class : com.mysql.cj.jdbc.Driver
	at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl$AggregatedClassLoader.findClass(ClassLoaderServiceImpl.java:342)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:351)
	... 26 more

mam wrażenie że properties które znalazłem w internecie są błędne, przynajmniej names bo values raczej sa ok

wiem że to trywialny przykłąd ale
ogólnie chce stworzyć program który połączy mi się z bazą danych i na tym szkielecie chciał bym sobie coś podziałać na bazie

0

Masz przyczynę podaną jak na talerzu:

Unable to load class [com.mysql.cj.jdbc.Driver]

Sprawdź:

  1. Czy masz connector do mysql widoczny w classpath
  2. Czy zgadza się Driver (tj. czy masz w connectorze pakiet com.mysql.cj.jdbc, a w nim Driver)

Maven repository mówi, że najnowszy connector to 8.012, sprwdź czy masz w pom.xml odpowiednią zależność.

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.12</version>
</dependency>
0

moim zdaniem powinieneś zacząć od konfiguracji javowej zamiat bawić się w XMLe, poszukaj jakichś materiałów i do dzieła

0

błąd był między innymi w nazwie zamiast mojabaza był mojaBaza... następny błąd wyskoczył z czasem środkowo europejskim ale poradziłem sobie wstawiając adnotacje

?serverTimezone=UTC

do tego zmiana dialektu MySQL z 8 na 5 i już łączy się i tworzy tabele

0

Witam mam taki problem z hibernate a mianowicie patrząc na tutorial
i robiąc to co pokazuję autor krok po kroku niestety na koniec wywala mi błędy i teraz pytanie brzmi czy ten poradnik jest aktualny ? bo również korzystałem ze strony http://iprogramujesz.pl/hibernate-dla-poczatkujacych/ fajnie jest opisane co trzeba zrobić jak ale niestety ten sam problem nie wiem co jest nie tak gdzie jest problem :\ a chcę to zrozumieć

0

To co mnie zastanawia to, że exception leci z lini 12 w Main. A ta linia jest pusta.
Nie ten projekt odpalasz.

0

faktycznie racje masz dlatego odpaliłem go jeszcze raz i mam coś takiego https://gyazo.com/9609da04e115c8b68d4e1e2ccf229588

0

Dodaj nagłówek xml dla pewności: <?xml version="1.0" encoding="UTF-8"?>
Zwaliduj w eclipse (jest taka opcja - validate zapewne).
A jak dalej nie pójdzie to wklejaj tu kod, a nie screenshoty.

0

Main

package Pierwsza;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class Main {

	public static void main(String[] args) {
		EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("myDatabase");
		EntityManager entityManager = entityManagerFactory.createEntityManager();
		
		entityManager.close();
		entityManagerFactory.close();
	}

}

oraz plik xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence 
xmlns="http://java.sun.com/xml/ns/persistence"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
	version="2.0">
	<persistence-unit name="myDatabase" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<properties>
			<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
			<property name="javax.persistence.jdbc.user" value="tutorial" />
			<property name="javax.persistence.jdbc.password" value="" />
			<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/tutoriallocalhost" />
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
			<property name="hibernate.hbm2ddl.auto" value="create-drop" />

			
		</properties>



	</persistence-unit>

</persistence>
0

Nie widzę nic, co mogłoby powodować błędy jakie otrzymujesz. Rebuild project, clean. Wyjdź do łazienki i wroć z powrotem do projektu? Nie wiem co może pomóc.

0

a czy mógłbym poprosić o przykładowy przykład na którym mógłbym sprawdzić czy jest w ogóle jakieś połączenie miedzy baza danych na localhoscie a eclipsem wiem że proszę o wiele ale po prostu nie wiem co jest grane czy mam coś skopane w ustawieniach czy coś naprawdę ja źle robię :\

0

Weź może ten plik xml odczytaj z poziomu aplikacji i go wyświetl na konsoli. To zanim utworzysz EntityManagera, żeby potwierdzić, że w pliku faktycznie coś jest, a nie tajemniczo zniknęło.

0

Witam ponownie po dłuższym zbadaniu sprawy odkryłem ze trzeba było trochę zmodyfikować
<provider>org.hibernate.ejb.HibernatePersistence</provider> wiec zamieniłęm ejb na jpa oraz na koncu przed </ dopisałem Provider
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> oraz zmieniłem z user o nazwie tutorial na root oraz podałem inna nazwę dla bazy danych po czym ponownie odpaliłem i otrzymałem w consoli taki komunikat i teraz zastanawiam się czy to jest już wszystko oki czy nie do końca ?

0

zdjęcie z konsoli

1 użytkowników online, w tym zalogowanych: 0, gości: 1