Spring Boot-Hibernate-таблица не существует

у меня есть сторонняя банка, которая содержит все объекты и отображение. В настоящее время я успешно использую эту банку в классическом приложении Spring-MVC, но теперь я пытаюсь использовать ее в приложении Spring-Boot. (1.5.7.RELEASE)

у меня есть это для моего приложения.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);
    }
}

поскольку это третья сторона, я должен иметь сканирование сеанса, поэтому у меня есть это в моем классе @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;
}

и это в моем приложение.свойства:

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

я получаю эту ошибку:

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

теперь имя таблицы "пользователь", так что это имеет смысл. Однако я использую эту банку для другого приложения, поэтому все остальные 100 ответов на эту тему не применяются.

это должна быть проблема конфигурации? Правильно?

обновление Я попытался @sam ответить ниже безрезультатно, но я смог посмотреть исходный код этого файла jar 3rd party, и это выглядит так:

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

таким образом, имя таблицы в аннотации является правильным. Как мне заставить Спринг использовать это? Im ищет стратегии именования по умолчанию и прочее... Есть Предложения?

3 ответов


Spring Boot-Hibernate-таблица не существует

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

Я проблема с вашей программой @EntityScan(basePackages = " com.третий.вечеринка.сущность.пакета") неверно где пакета не acctable для имени пакета в java.

другое

убедитесь, что ваша сущность pojo пользователей класс четко определена

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

попробуйте добавить ниже код строки в приложение.свойства и работать

приложение.свойства

# 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

и исключить из класса автоконфигурации Hibernate, если он есть, добавив ниже аннотацию

@SpringBootApplication(exclude={HibernateJpaAutoConfiguration.class})

это вопрос аналогичного типа над переполнением стека Hibernate говорит, что таблица не существует, но она


реальный ответ (для меня), который может помочь кому-то, - это вообще не использовать неявную стратегию именования. Если вы просто хотите использовать то, что аннотируется в классе сущностей, используйте физический, например:

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

благодаря ответу @rsinha здесь:

Hibernate стратегия именования изменения имен таблиц


у меня была та же проблема, но другое решение: по-видимому, Hibernate/JPA в нижнем регистре все буквы в имени таблицы. Так что даже если бы мой стол был User и я

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

Я все равно получу сообщение об ошибке:

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

решением для меня было изменить имя таблицы в DB с User to user (верхний регистр -> нижний регистр)

Примечание: я использовал другое имя сущности для моей таблицы (вот почему у меня есть OfficeUser как имя класса и другое название таблицы)