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?
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
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
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)
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;