Почему «уникальный = true» не работает в спящем объекте? - PullRequest
0 голосов
/ 10 июня 2019

Я создал объект с именем таблицы и именами столбцов.Я также добавил ограничение уникального ключа для имени столбца.Но при запуске отображается следующая ошибка:

org.hibernate.tool.schema.spi.CommandAcceptanceException: Ошибка при выполнении DDL ".

java.sql.SQLSyntaxErrorException: указанный ключ был слишком длинным, максимальная длина ключа - 1000 байт

  1. После запуска приложения весенней загрузки я попытался добавитьуникальное ограничение вручную в MySQL, - НЕ РАБОТАЕТ

  2. Я добавил следующий код - НЕ РАБОТАЕТ

    @Table(name = "ingredient", uniqueConstraints=@UniqueConstraint(name="uk_ingredient_name",columnNames="ingredient_name"))

    @Column(name = "ingredient_name" ,unique = true)
    private String ingredientName;
Попытался создать таблицу вручную в Mysql Workbench и позже попытался изменить имя столбца с помощью уникального ключа.ЭТО РАБОТАЕТ.Но я хочу, чтобы Hibernate сделал это для меня.
    @Entity
    @Table(name = "ingredient")
    public class Ingredient {

    @Id
    @Column(name="ingredient_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(name = "ingredient_name" ,unique = true)
    private String ingredientName; 

Я хочу сохранить ингредиенты без повторов.Я не хочу повторяющихся записей.Я прошел через другие ответы, и ни одно из этих решений не помогло мне.

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

Я попытался добавить длину = 20 в @column. Работает совершенно нормально, без ошибок.

0 голосов
/ 10 июня 2019

Не могли бы вы удалить

,unique = true

из аннотации @Column и попробовать, кажется, что существует ошибка гибернации, когда при использовании уникального true он не подчиняется стратегии именования.

Для получения дополнительной информации см.этот пост

@ UniqueConstraint и @Column (unique = true) в аннотации гибернации

и этот

https://hibernate.atlassian.net/browse/HHH-11586

После удаления unique = true я могу сгенерировать уникальное ограничение с указанным именем uk_ingredient_name. Так как оно уже указано в аннотации @Table.

Ошибка, которую вы получаете, заключается в том, что hibernateгенерирует уникальное имя ограничения, превышающее допустимый предел, и оно не учитывает объявленное вами имя ограничения.

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