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)
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>
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
Vous devez ajouter mysql
jar JDBC dans vos dépendances.
com.mysql.jdbc.Driver
.Fixez votre nom d'utilisateur et votre mot de passe comme
"connection.username" for database user
"connection.password" for database user password
Créez une base de données mysql. Voir ceci .
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
Modifiez votre dialecte mysql en org.hibernate.dialect.MySQLDialect
<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.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
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é.
<property name="connection.url">jdbc:mysql://localhost:3306/test?serverTimezone=UTC</property>
Vous devez définir serverTimezone
.