wake-up-neo.net

Spring Boot - Hibernate - Tabelle existiert nicht

Ich habe ein 3rd-Party-Glas, das alle Entitäten und Mapping enthält. Ich verwende dieses Glas derzeit erfolgreich in einer klassischen Spring-MVC-Anwendung, aber jetzt versuche ich, es in einer Spring-Boot-Anwendung zu verwenden. (1.5.7.AUSTAUSCH)

Ich habe folgendes 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);
    }
}

Da es sich um einen Drittanbieter handelt, muss ich auch den Sitzungsscan haben, damit ich dies in meiner @Configuration-Klasse habe:

@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 das in meinen 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

Ich erhalte diesen Fehler:

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

Jetzt ist der Tabellenname "User", also macht das Sinn. Ich verwende dieses Glas jedoch für eine andere Anwendung, sodass alle anderen 100 Antworten zu diesem Thema nicht zutreffen. 

MUSS ein Konfigurationsproblem sein? Recht? 

UPDATE Ich habe versucht, @sam unten zu versuchen, aber ich konnte den Quellcode dieser JAR-Datei von Drittanbietern anzeigen und es sieht so aus:

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

Der Tabellenname in der Anmerkung ist also korrekt. Wie bekomme ich Spring, um das zu nutzen? Ich schaue nach Standard-Namensstrategien und Sachen ... Irgendwelche Vorschläge?

7
mmaceachran

Die wirkliche Antwort (für mich), die jemandem helfen kann, besteht darin, überhaupt keine implizite Namensstrategie zu verwenden. Wenn Sie nur das verwenden möchten, was in der Entitätsklasse mit Anmerkungen versehen ist, verwenden Sie eine physische Klasse wie folgt:

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

Dank der @rsinha-Antwort hier:

Hibernate-Benennungsstrategie, die Tabellennamen ändert

4
mmaceachran

Spring Boot - Hibernate - Tabelle existiert nicht

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

I Ding Problem mit Ihrem Programm @EntityScan (basePackages = "com.third.party.entity .package") ist falsch, wobei package für den Paketnamen in Java nicht verfügbar ist.

Else

Stellen Sie sicher, dass Ihre Pojo-Entität user gut definiert ist

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

Versuchen Sie, den Zeilencode in application.properties hinzuzufügen, und führen Sie ihn aus

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

Und aus der Ruhezustand-Autokonfigurationsklasse ausschließen, Wenn es unter Annotation hinzugefügt wird

@SpringBootApplication(exclude={HibernateJpaAutoConfiguration.class})

Dies ist ein ähnlicher Typ von Frage über Stapelüberlauf Hibernate besagt, dass die Tabelle nicht existiert, aber sie existiert.

4
user4856296

Ich hatte das gleiche Problem, aber eine andere Lösung: Anscheinend hibernate/JPA alle Buchstaben im Tabellennamen in Kleinbuchstaben. Also auch wenn mein Tisch User war und ich hatte

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

Ich würde immer noch die Fehlermeldung bekommen: 

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

Die Lösung für mich war, den Namen der Tabelle in der DB von User in user zu ändern (Großbuchstaben -> Kleinbuchstaben).

HINWEIS: Ich habe einen anderen Entitätsnamen für meine Tabelle verwendet (deshalb habe ich OfficeUser als Klassennamen und einen anderen Tabellennamen.)

1
SnuKies

Ich hatte ein ähnliches Problem und der Grund war, dass mein Entity-Objekt eine Klassenvariable namens "group" hatte, ein mysql-Schlüsselwort. Da ich es nicht mit @Column kommentiert habe, um einen anderen Namen zu geben, wurde es gezwungen, "group" als Spaltennamen zu verwenden. Die Lösung war einfach, die Klassenvariable mit @Column zu versehen, um einen anderen Namen zu erhalten.

Vor

 private String group;

Nach dem

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