Создание таблицы исключений типов гибернации Spring boot с полем JSON

#java #mysql #spring-boot #hibernate #spring-data-jpa

#java #mysql #spring-boot #гибернация #spring-data-jpa

Вопрос:

Мне нужна таблица mysql со столбцом JSON, и для этого я использовал зависимость s vladmihalcea / hibernate-types, и я следовал официальной документации и сделал пример как свой, но я получил исключение и как я могу преодолеть это исключение.

Ошибка при выполнении DDL «создать таблицу book (id bigint not null, isbn varchar(255), свойства jsonb, первичный ключ (id)) engine = InnoDB» с помощью инструкции JDBC

У вас ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с ‘jsonb, primary key (id)) engine = InnoDB’ в строке 1

Класс сущности (я выделил методы получения и установки для четкого отображения кода здесь, и следует добавить методы получения и установки)

 @Entity(name = "Book")
@Table(name = "book")
@TypeDef(
        name = "jsonb",
        typeClass = JsonBinaryType.class
)
public class Book {

    @Id
    @GeneratedValue
    private Long id;

    @NaturalId
    private String isbn;

    @Type(type = "jsonb")
    @Column(columnDefinition = "jsonb")
    private String properties;
    
}
  

Интерфейс репозитория

 @Repository
public interface BookRepository extends JpaRepository<Book,Long> {
}
  

Ответ №1:

Я мог бы исправить исключение, изменив

 @TypeDefs({
    @TypeDef(name = "json", typeClass = JsonStringType.class),
    @TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
})
  

вместо

 @TypeDef(
        name = "jsonb",
        typeClass = JsonBinaryType.class
)
  

Также

  @Type(type = "json")
    @Column(columnDefinition = "json")
    private String properties;
  

вместо

  @Type(type = "jsonb")
    @Column(columnDefinition = "jsonb")
    private String properties;
  

Я допустил ошибку, и я следовал примеру кода PostgreSQL, а не mysql

Комментарии:

1. Мне любопытно узнать, как это может работать. MySQL не имеет типа данных jsonb. Если вы выполните это: create table book ( id bigint not null, isbn_string varchar(255), properties jsonb, primary key (id) ) , вы получите сообщение об ошибке.

2. @jumping_monkey Я допустил ошибку и обновил раздел кода.

3. Хорошо, да, спасибо за обновление, с json это будет работать, поскольку это поддерживаемый собственный тип данных. Приветствия.