я испытываю проблемы с Hibernate метания следующие ошибки:Hibernate говорит, что таблица не существует, но она делает
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'Library.book' doesn't exist
настройки Моя зависимость выглядит следующим образом (я считаю, что это может быть причиной):
compile("org.springframework.boot:spring-boot-starter-web")
testCompile("org.springframework.boot:spring-boot-starter-test")
compile 'org.springframework:spring-orm:4.1.6.RELEASE'
compile 'org.springframework.data:spring-data-jpa:1.8.0.RELEASE'
compile 'org.hibernate:hibernate-entitymanager:4.3.8.Final'
compile 'org.hibernate:hibernate-core:4.3.8.Final'
compile 'org.apache.commons:commons-dbcp2:2.1'
compile 'mysql:mysql-connector-java:5.1.35'
compile 'org.apache.logging.log4j:log4j-core:2.2'
Итак, я использую Spring-boot-starter-web (проект, созданный с использованием Spring CLI), а затем добавил не-пружинные зависимости для Hibernate и Spring Data, среди прочего, (использовал ту же самую зависимость, установленную в разных проектах, но без Spring-Boot-Starter-Web, и все работало просто отлично).
После прочтения других вопросов я проверил, имеет ли мои @EnableJpaRepositories правильный путь к репозиториям, и если у entityManagerFactoryBean есть пакетыToScan правильно настроены.
Я считаю, что Spring Boot имеет конфликты с другими зависимостями, потому что моя конфигурация выглядит нормально.
Я теперь показывают некоторые фрагменты кода, потому что я мог бы быть неправым о правильности моей конфигурации в, р
Книга MySQL DDL:
CREATE TABLE IF NOT EXISTS `Library`.`Book` (
`id` INT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(100) NOT NULL,
`description` VARCHAR(256),
`genre` VARCHAR(50) NOT NULL,
`releaseDate` DATE NOT NULL,
PRIMARY KEY (`id`)
)
Книга лицо:
@Entity
@Table(name="Book")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String title;
private String description;
private String genre;
@Temporal(TemporalType.DATE)
private Date releaseDate;
}
EntityManagerFactory боб :
@Bean
@Autowired(required = true)
public EntityManagerFactory entityManagerFactory(DataSource dataSource) {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setGenerateDdl(true);
vendorAdapter.setShowSql(false);
vendorAdapter.setDatabasePlatform("org.hibernate.dialect.MySQLDialect");
vendorAdapter.setDatabase(Database.MYSQL);
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(vendorAdapter);
factory.setPackagesToScan("pl.com.imralav.library.data.entity");
factory.setDataSource(dataSource);
Properties properties = new Properties();
properties.setProperty("hibernate.generate_statistics", "false");
properties.setProperty("hibernate.show_sql", "false");
factory.setJpaProperties(properties);
factory.afterPropertiesSet();
return factory.getObject();
}
Скажите, пожалуйста, если вам нужна дополнительная информация.
Если вы внимательно посмотрите, что «Library.book» имеет «книгу» в нижнем регистре. Возможно, это связано с [JPA 2.0 и MySQL не соответствуют именам таблиц, чувствительных к регистру] (http://stackoverflow.com/questions/15247386/jpa-2-0-mysql-are-not-respecting-case-sensitive-table -names) –
Существует некоторое улучшение после изменения имени базы данных в книге, появляется новая ошибка: 'com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Неизвестный столбец 'book0_.release_date' в полевом списке ', я попытался исправить его, используя @Column (name = "releaseDate") аннотацию, но это не сработало (как @Table (name = "Book") не было). Любая идея, почему аннотации игнорируются? – Tomek
После воссоздания базы данных с изменением схемы книги (release_date вместо releaseDate) все работает отлично.Но я не удовлетворен, так как мне нужно знать, почему работали некоторые аннотации (например, '@ Entity', потому что книга была сопоставлена с таблицей базы данных), а некоторые нет (например,' @ Table', '@ Column', они didn 't заставить Hibernate искать другое имя таблицы или другого столбца). – Tomek