Невозможно извлечь ResultSet, связанный со строкой как - PullRequest
0 голосов
/ 15 февраля 2019

Весенние сообщения об ошибках:

: GenerationTarget encountered exception accepting command : Error executing DDL "create table category_class (category_name varchar(255) not null, primary key (category_name)) engine=MyISAM" via JDBC Statement



: GenerationTarget encountered exception accepting command : Error executing DDL "alter table book_class add constraint FKqov24n7bmx5f0s8d74tdxbgbk foreign key (book_category) references category_class (category_name)" via JDBC Statement

Невозможно точно определить набор результатов, используя Spring Boot с Hibernate.

 Caused by: java.sql.SQLSyntaxErrorException: Table 'myDatabase.category_class' doesn't exist

Все остальные мои таблицы отображаются правильно, однако мой класс категориидействительно имеет строку как PK, которая может быть причиной проблемы.Ошибка возникает, когда я пытаюсь получить доступ к базе данных mysql с помощью findAll через мой CategoryService и CategoryRepository, который расширяет JPARepository.

- Category.java -

package myPackage;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.util.List;

@Data
@NoArgsConstructor
@Entity
@Table(name="category_class")
public class Category {
        @Id
        @Column(name = "categoryName")
        private String name;

        @OneToMany(mappedBy = "category")
        private List<Book> books;
}

- application.properties--

spring.datasource.url= jdbc:mysql://localhost:3306/oblig2_v3
spring.datasource.username=
spring.datasource.password =
spring.datasource.testWhileIdle=true
spring.datasource.validationQuery=SELECT 1
spring.jpa.generate-ddl=true
spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=create
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
server.port=8080

Кто-нибудь знает, почему моя таблица не создается в MySQL?

РЕДАКТИРОВАТЬ: добавлен класс книги && cleanup.

--- Book.java--

import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.util.List;

@Data
@NoArgsConstructor
@Entity
@Table(name="book_class")
public class Book {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private long ISBN; //PK
        private String title;
        private String releaseYear;
        private int quantity;

        @ManyToOne
        @JoinColumn(name ="book_category")
        private Category category;

        @ManyToOne
        @JoinColumn(name ="author")
        private Author author;

        @ManyToMany(mappedBy = "books")
        private List<Order> orders;

}

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Это было связано с тем, что VARCHAR как PK как указано @Arnaud.Поскольку я не хотел менять свой PK, я перешел по предоставленной ссылке: # 1071 - указанный ключ был слишком длинным;максимальная длина ключа составляет 1000 байт

И сделал быстрое исправление из одного из ответов, создав базу данных в mysql с:

create database my_db character set utf8 collate utf8_bin;, решив мою проблему.

Приведенная ссылка должна быть полезна всем, кто сталкивается с подобными проблемами.Спасибо за вашу помощь.

0 голосов
/ 15 февраля 2019

Вам необходимо использовать свойство

spring.jpa.hibernate.ddl-auto=create-drop  or update

Проблема в вашем случае состоит в том, что у вас уже есть созданная база данных, и она не пытается обновить ее.

У вас естьдве опции:

  1. Использовать обновление, это заставит Spring просмотреть метаданные вашей схемы и попытаться применить необходимые изменения.
  2. Удалить и заново создать схему каждый раз - этоможет быть желательным на этапе разработки или в сценариях модульного / интеграционного тестирования.

Согласно весенней документации, следующие значения этого свойства действительны:

Вы можете установитьЯсно, что spring.jpa.hibernate.ddl-auto и стандартные значения свойств Hibernate отсутствуют, проверяют, обновляют, создают и создают-отбрасывают.Spring Boot выбирает значение по умолчанию для вас в зависимости от того, считает ли он, что ваша база данных встроена.По умолчанию это создает-отбрасывание, если менеджер схемы не был обнаружен или нет во всех других случаях.Встроенная база данных обнаруживается при просмотре типа подключения.hsqldb, h2 и derby встроены, а другие нет.Будьте осторожны при переключении из оперативной памяти в «настоящую» базу данных, чтобы не делать предположений о существовании таблиц и данных на новой платформе.Вы должны либо явно установить ddl-auto, либо использовать один из других механизмов для инициализации базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...