#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 это будет работать, поскольку это поддерживаемый собственный тип данных. Приветствия.