J'ai l'entité suivante définie:
@Entity
@Table(name = "EmailTemplate")
public class EmailTemplate {
Malgré l'annotation de table, je reçois Java.sql.SQLException: Invalid object name 'email_template'
. Comment puis-je empêcher une classe d'entité telle que EmailTemplate d'être transformée en nom de table email_template?
Modifier:
J'utilise Spring Boot: démarrez JPA. À partir de mon fichier build.gradle,
compile("org.springframework.boot:spring-boot-starter-data-jpa")
Spring utilise par défaut org.springframework.boot.orm.jpa.SpringNamingStrategy
qui divise les noms de cas de chameaux avec un trait de soulignement. Essayez de définir spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.EJB3NamingStrategy
dans application.properties
. Consultez this et this pour plus d'informations.
Pour hibernate v5 :
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
Utilisation
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.DefaultNamingStrategy
org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute statement; SQL [n/a];
nested exception is org.hibernate.exception.SQLGrammarException: could not execute statement
Les deux sont obligatoires:
implicit-strategy
physical-strategy
Résolu.
Nom d'objet non valide: Springboot avec JPA (serveur SQL)
Dans application.yaml/properties, spécifiez le
spring.jpa.hibernate.naming.implicit-strategie spring.jpa.hibernate.naming.physical-strategy
jpa: show-sql: false hiberner: ddl-auto: none # La valeur par défaut est "none" si vous n'êtes PAS en mode intégré appellation: stratégie implicite: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl stratégie physique: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl