web-dev-qa-db-fra.com

Spring Boot - Hibernate - Le tableau n'existe pas

J'ai un bocal tiers qui contient toutes les entités et la cartographie. J'utilise actuellement ce bocal avec succès dans une application Spring-MVC classique, mais j'essaie maintenant de l'utiliser dans une application Spring-Boot. (1.5.7.LELEASE)

J'ai ceci pour mon Applicaion.Java:

@SpringBootApplication
@EntityScan(basePackages = "com.third.party.entity.package")
public class Application extends SpringBootServletInitializer {

    public static void main(String[] args) {
      SpringApplication.run(Application.class, args);
    }
}

Comme il s’agit d’une tierce partie, je dois également analyser la session pour que cela soit dans ma classe @Configuration:

@Bean
public LocalSessionFactoryBean sessionFactory(EntityManagerFactory emf) throws ClassNotFoundException {
    LocalSessionFactoryBean fact = new LocalSessionFactoryBean();
    fact.setAnnotatedPackages("com.third.party.entity.package");
    fact.setPackagesToScan("com.third.party.entity.package");
    fact.setDataSource(dataSource);
    return fact;
}

et ceci dans mon application.properties:

spring.datasource.url=jdbc:mysql://dbserver:3306/mydb?useSSL=false
spring.datasource.username=user
spring.datasource.password=password
spring.datasource.Tomcat.max-wait=20000
spring.datasource.Tomcat.max-active=50
spring.datasource.Tomcat.max-idle=20
spring.datasource.Tomcat.min-idle=15
spring.jpa.properties.hibernate.dialect =org.hibernate.dialect.MySQL5Dialect
spring.jpa.properties.hibernate.id.new_generator_mappings = false
spring.jpa.properties.hibernate.format_sql = true
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext

Je reçois cette erreur:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'mydb.user' doesn't exist

Maintenant, le nom de la table est "User", ce qui est logique. Cependant, j'utilise ce bocal pour une autre application, de sorte que les 100 autres réponses à ce sujet ne s'appliquent pas. 

Cela DOIT être un problème de configuration? Droite? 

UPDATE J'ai essayé en vain la réponse de @sam ci-dessous, mais j’ai pu consulter le code source de ce fichier jar tiers, et il se présente comme suit:

@Entity
@Table(name = "User")
public class User {
     etc...
}

Le nom de la table dans l'annotation est donc correct. Comment est-ce que je peux utiliser le printemps? Je cherche une stratégie de nommage par défaut et des trucs ... Des suggestions?

7
mmaceachran

La vraie réponse (pour moi) qui puisse aider quelqu'un est de ne pas utiliser de stratégie de nommage implicite. Si vous voulez juste utiliser ce qui est annoté dans la classe d'entité, utilisez un objet physique comme ceci:

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

Merci à la réponse de @rsinha ici:

Stratégie de nommage d'Hibernate pour changer les noms de table

4
mmaceachran

Spring Boot - Hibernate - Le tableau n'existe pas

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'mydb.user' **doesn't exist**

Le problème avec votre programme @EntityScan (basePackages = "com.third.party.entity .package") est incorrect lorsque package n'est pas actif pour le nom du package en Java.

Autre

Assurez-vous que votre entité Pojo user classe est bien définie

@Entity
@Table(name = "User")
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    ...
    }

Essayez d’ajouter le code de ligne ci-dessous dans application.properties et exécutez

application.properties

# Hibernate ddl auto (create, create-drop, update, none): with "update" the database
# schema will be automatically updated accordingly to Java entities found in the project
spring.jpa.hibernate.ddl-auto = update

Et exclure de la classe de configuration automatique d'Hibernate, si c'est le cas en ajoutant ci-dessous Annotation

@SpringBootApplication(exclude={HibernateJpaAutoConfiguration.class})

C'est une question de type similaire sur le débordement de pile Hibernate dit que la table n'existe pas mais qu'elle existe

4
user4856296

J'avais le même problème, mais une solution différente: apparemment, Hibernate/JPA minuscule toutes les lettres du nom de la table. Donc, même si ma table était User et que je devais

@Entity
@Table(name = "User")
public class OfficeUser {
...
}

J'obtiens toujours l'erreur en disant: 

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'doctors_office.user' doesn't exist

La solution pour moi était de changer le nom de la table dans la base de données de User à user (majuscule -> minuscule)

REMARQUE: j'utilisais un nom d'entité différent pour ma table (c'est pourquoi j'ai OfficeUser comme nom de classe et un nom de table différent)

1
SnuKies

J'ai rencontré le même problème et la raison était que mon objet Entity avait une variable de classe nommée "groupe" qui est un mot clé mysql. Comme je ne l'ai pas annoté avec @Column pour donner un nom différent, il a été obligé d'utiliser "groupe" comme nom de colonne. La solution a été simple pour annoter la variable de classe avec @Column pour lui donner un nom différent.

Avant

 private String group;

Après

  @Column(name="groupName")
    private String group;
0
Vaibs