web-dev-qa-db-fra.com

Impossible de créer le service demandé [org.hibernate .engine.jdbc.env.spi.JdbcEnvironment] -MySQL

Je suis un débutant à Hibernate. J'utilise actuellement Spring Boot Framework et j'essaie de créer des tables de base de données via hibernate.

Je sais que la même question est posée auparavant, mais je n'arrive pas à comprendre comment corriger l'erreur en fonction de mon environnement.

hibernate.cfg.xml

<hibernate-configuration>
<session-factory>
    <!-- Database connection settings -->
    <property name="connection.driver_class">org.mm.mysql.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost:3306</property>
    <property name="connection_userid">user</property>
    <property name="connection_pwd">pass</property>

    <!-- JDBC connection pool (use the built-in) -->
    <property name="connection_pool_size">true</property>

    <!-- SQL dialect -->
    <property name="dialect">org.hibernate.MySQLDialect</property>

    <!-- Disable the second-level cache -->
    <property name="cache.provider_class">org.hibernate.NoCacheProvider</property>

    <!-- Echo all executed SQL to stdout -->
    <property name="show_sql">1</property>

    <!-- Drop and re-create the database schema on startup -->
    <property name="hbmdl.auto">update</property>

    <!-- Names the annotated entity class -->
    <mapping class="com.test.springboot.model.AdultParticipant" />

</session-factory>

classe principale

     public static void main(String[] args) throws Exception {
    SpringApplication.run(WebApplication.class, args);

    Configuration cfg = new Configuration();
    cfg.configure("hibernate.cfg.xml");
    SessionFactory factory = cfg.buildSessionFactory();

    Session session = factory.openSession();
    Transaction t = session.beginTransaction();

    AdultParticipant ap = new AdultParticipant();
    ap.setFirstName("User"); 
    ap.setLastName("UserLastName");

    session.persist(ap);

    t.commit();

    session.close();
    System.out.println("successfully saved");

Classe POJO

@Entity
@Table(name = "adultparticipant")
public class AdultParticipant {

@GeneratedValue
@Id
@Column (name = "id")
private int id;

@Column (name = "firstName")
private String firstName;

@Column (name = "lastName")
private String lastName;


public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}


public String getFirstName() {
    return firstName;
}
public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}
public void setLastName(String lastName) {
    this.lastName = lastName;
  }
}

Classe DAOImpl

  public class AdultParticipantDAOImpl implements AdultParticipantDAO{
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
}

@Override
public void save(AdultParticipant ap) {
    Session session = this.sessionFactory.openSession();
    Transaction tx = session.beginTransaction();
    session.persist(ap);
    tx.commit();
    session.close();
}

@SuppressWarnings("unchecked")
@Override
public List<AdultParticipant> list() {
    Session session = this.sessionFactory.openSession();
    List<AdultParticipant> adultParticipants = session.createQuery("from AdultParticipant").list();
    session.close();
    return adultParticipants;
 }
}

Classe DAO

public interface AdultParticipantDAO {

public void save(AdultParticipant p);

public List<AdultParticipant> list();

}

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>
<artifactId>hello-springboot</artifactId>
<name>hello-springboot</name>
<description>hello-springboot</description>
<packaging>war</packaging>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.5.RELEASE</version>
</parent>

<properties>
    <Java.version>1.8</Java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-Tomcat</artifactId>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.Apache.Tomcat.embed</groupId>
        <artifactId>Tomcat-embed-jasper</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-Java</artifactId>
        <version>5.1.40</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

ERREUR dans la console

2017-03-13 11:48:40.512  WARN 9532 --- [           main] org.hibernate.orm.connections.pooling    : HHH10001002: Using H
ibernate 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:271)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.Java:233)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.Java:210)
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.Java:51)
5
In-young Choung

Mettez à niveau le pilote MySql vers mysql-connector-Java - 8.0.17 et

Ceux qui utilisent supérieur à MySQL 5.5 version

changer leur propriété de pilote

de com.mysql.jdbc.Driver à com.mysql.cj.jdbc.Driver

car:

Chargement de la classe com.mysql.jdbc.Driver. C'est obsolète. La nouvelle classe de pilotes est com.mysql.cj.jdbc.Driver. Le pilote est automatiquement enregistré via le SPI et le chargement manuel de la classe de pilote est généralement inutile.INFO - HHH000401: utilisation du pilote [com.mysql.jdbc.Driver] à l'URL ....

dans hibernate.properties

hibernate.connection.driver_class = com.mysql.cj.jdbc.Driver

ou si vous utilisez hibernate.cfg.xml mise à jour

<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
4
UdayKiran Pulipati

connection.driver_class la propriété doit être compatible avec mysql-connector pot.

mysql-connector <5.5.xx utilisation com.mysql.jdbc.Driver

mysql-connector> 5.5.xx utilisation com.mysql.cj.jdbc.Driver

3
Kapil Thakkar

Vous devez ajouter mysql jar JDBC dans vos dépendances.


  1. Fixez le nom de votre classe de pilote comme com.mysql.jdbc.Driver.
  2. Fixez votre nom d'utilisateur et votre mot de passe comme

    "connection.username" for database user
    "connection.password" for database user password
    
  3. Créez une base de données mysql. Voir ceci .

  4. Pour l'avertissement SSL, modifiez votre connection.url pour inclure use ssl false. Par exemple, jdbc:mysql://localhost:3306/<enter-your-database>?autoReconnect=true&useSSL=false

  5. Modifiez votre dialecte mysql en org.hibernate.dialect.MySQLDialect

  6. Utilisation <property name="hbmdl.auto">create-drop</property> au lieu de <property name="hbmdl.auto">update</property> cependant n'utilisez pas cette option en production. Vous devez créer le schéma vous-même et ne pas le faire via la mise en veille prolongée.
1
GauravJ

Utiliser HSQLDialect et non MYSQLDialect

spring.jpa.database-platform=org.hibernate.dialect.HSQLDialect
spring.jpa.hibernate.ddl-auto=none
spring.jpa.show-sql=true


spring.datasource.url=jdbc:mysql://localhost:3306/xyz?serverTimezone=CST6CDT
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
1
Beginner

J'ai eu le même problème lorsque j'ai déployé mon fichier de guerre sur Tomcat dans mon environnement de démonstration. Mon application ne démarre pas car, dans mon dossier/Tomcat/webapp/ROOT, j'y ai trouvé mon fichier de guerre Myapp.war. Par exemple, dans mon dossier ROOT, il contient WEB-INF, META-INF et Myapp.war, ce qui a provoqué le problème de démarrage. J'ai supprimé le fichier de guerre et cela a fonctionné.

0
MishraJi
 <property name="connection.url">jdbc:mysql://localhost:3306/test?serverTimezone=UTC</property>

Vous devez définir serverTimezone.

0
jingyuan iu