2017-10-07 3 views
1

Ich habe ein 3rd Party Jar, das alle Entitäten und Mapping enthält. Ich verwende dieses jar erfolgreich in einer klassischen Spring-MVC-Anwendung, aber jetzt versuche ich es in einer Spring-Boot-Anwendung zu verwenden. (1.5.7.RELEASE)Spring Boot - Hibernate - Tabelle existiert nicht

Ich habe dies 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 eine dritte Partei ist, ich habe auch die Sitzung Scan haben, so habe ich dies in meinem @ Konfigurationsklasse:

@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 dies in meinem 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 diese Störung erhalte:

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

Jetzt ist der Tabellenname "Benutzer", so dass Art von Sinn macht. Allerdings verwende ich dieses Glas für eine andere Anwendung, so dass alle anderen 100 Antworten zu diesem Thema nicht gelten.

Es muss ein Konfigurationsproblem sein? Recht?

UPDATE Ich versuchte @ Sam unten ohne Erfolg zu beantworten, aber ich war in der Lage auf den Quellcode dieser 3rd-Party-JAR-Datei zu suchen, und es sieht wie folgt aus:

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

So ist die Der Tabellenname in der Anmerkung ist korrekt. Wie bekomme ich Frühling, um das zu benutzen? Ich suche eine Standardbenennungsstrategie und Sachen ... Irgendwelche Vorschläge?

Antwort

2

Spring Boot - Hibernate - Table does not exists

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

ich, was Problem mit Ihrem Programm @EntityScan (basePackages = "com.third.party.entity. Paket") ist falsch, wo Paket nicht für Paketnamen in Java acctable.

Else

Stellen Sie sicher, Ihre pojo Einheit Benutzer Klasse gut

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

Try unten definiert Zeile Code in application.properties hinzufügen und laufen

Anwendung. Eigenschaften

# 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 dem Ruhezustand der automatischen Konfiguration Klasse auszuschließen, wenn es dort unter Annotation durch Zugabe

@SpringBootApplication(exclude={HibernateJpaAutoConfiguration.class}) 

Dies ist ähnlich Typ Frage über Stapelüberlauf Hibernate says that table doesn't exist but it does

+0

ich nicht DDL-Auto einstellen zu aktualisieren, da ich die DB nicht ändern kann. Das Ausschließen von HibernateJpaAutoConfiguration gibt mir nur eine bean nicht gefundene Bean vom Typ 'javax.persistence.EntityManagerFactory' – mmaceachran

+0

@mmaceachran Hast du @EntityScan (basePackages = "com.third.party.entity.package" überprüft) ist korrekt !! –

+0

ja, das ist das richtige Paket. Ich habe es gerade umbenannt. Und ich habe meine Frage bearbeitet, also zeige die User-Klasse etwas an. – mmaceachran

0

Die wirkliche Antwort (für mich), die möglicherweise jemandem helfen, eine implizite Benennungsstrategie überhaupt nicht zu verwenden.Wenn Sie wollen einfach nur verwenden, was in der Entity-Klasse bezeichnet ist, eine physische wie folgt verwenden:

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

Dank der @rsinha Antwort hier:

Hibernate naming strategy changing table names

Verwandte Themen