Spring Boot - Hibernate - Tabelle nicht vorhanden ist
Ich habe ein 3rd-party jar enthält alle Entitäten und das mapping. Ich bin derzeit mit diesem jar erfolgreich im klassischen Spring-MVC-Anwendung, aber jetzt versuche ich es in einer Spring-Boot-Anwendung. (1.5.7.RELEASE)
Habe ich diese für meine 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);
}
}
Als es eine Dritte Partei, ich habe die session-scan als gut, so habe ich das in meiner @Configuration-Klasse:
@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;
}
und diese in meiner Anwendung.Eigenschaften:
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
Bin ich immer diese Fehlermeldung:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'mydb.user' doesn't exist
Nun der name der Tabelle ist "Benutzer" so, dass irgendwie Sinn macht. Aber ich bin mit diesem Glas für eine andere Anwendung, so dass alle von den 100 anderen Antworten zu diesem Thema nicht gelten.
MUSS es ein Problem bei der Konfiguration? Richtig?
UPDATE
Ich habe versucht @sam Antwort unten ohne Erfolg, aber ich war in der Lage, Blick auf den Quellcode dieser 3rd-party jar-Datei, und es sieht wie folgt aus:
@Entity
@Table(name = "User")
public class User {
etc...
}
So der name der Tabelle in der Anmerkung ist korrekt. Wie bekomme ich die Feder zu verwenden? Ich Suche ein default naming-Strategien und Zeug... Irgendwelche Vorschläge?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die richtige Antwort (für mich), dass jemand kann helfen ist nicht für die Verwendung einer impliziten Benennung der Strategie überhaupt. Wenn Sie nur wollen, zu verwenden, was ist kommentiert in der entity-Klasse, verwenden Sie eine physische wie diese:
Dank an die @rsinha Antwort hier:
Hibernate naming Strategie ändern von Tabellennamen
Ich, was das Problem mit Ihrem Programm @EntityScan(basePackages = "com.Dritte.party.Entität.Paket") ist falsch, wo Paket nicht akzeptabel, da eine package-Namen in java.
Sonst
Stellen Sie sicher, dass Ihre pojo entity Benutzer Klasse ist richtig definiert
Versuchen Sie, fügen Sie folgende Zeile code in Anwendung.Eigenschaften und führen
Anwendung.Eigenschaften
Und schließen der Hibernate-Autokonfiguration-Klasse in Fall ist es dort, indem Sie die Anmerkung unten
Diese Frage ist ähnlich Hibernate sagt, dass die Tabelle nicht existiert, aber es funktioniert
Ich hatte das gleiche Problem, aber eine andere Lösung: Offenbar, Hibernate/JPA unteren Fällen alle Buchstaben in der name der Tabelle. Also auch wenn mein Tisch war
User
und ich hatteIch würde immer noch den Fehler zu sagen :
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'doctors_office.user' doesn't exist
Die Lösung für mich war die änderung der Tabellenname in der DB von
User
zuuser
(groß -> klein)HINWEIS: ich war mit verschiedenen name der Entität, für meinen Tisch (Das ist, warum ich
OfficeUser
als Klassennamen und andere Tabellen-Namen)Ich Stand vor dem ähnlichen Problem und der Grund war, dass meine Entity-Objekt wurde mit einer Klasse variable mit dem Namen "Gruppe", die ein mysql-Schlüsselwort. Als ich noch nicht kommentierte es mit @Column zu geben, einige andere Namen , es war gezwungen, "group" als den Namen einer Spalte aus. Lösung war ganz einfach zu kommentieren die Klasse variable mit @Column geben Sie einen anderen Namen.
Bevor
Nach
Ich habe versucht, alle oben genannten Lösungen, aber am Ende war der Fehler aus einem viel einfacheren Grund.
Versteckt in den Exception-Stacktrace ich festgestellt, dass eines der Attribute im Modell benannt wurde, als ein in SQL reserviertes Wort ist. Dies verhinderte die Tabelle erstellt wird.