Не могу использовать строку как @Id с SpringData - PullRequest
0 голосов
/ 02 июня 2018

Я хочу создать новую таблицу в своей базе данных, используя этот класс

@Entity
@Table(name = "currency_rate")
public class CurrencyRate {

    @Id
    private String id;

    @Column(name = "source_currency")
    private String sourceCurrency;

    @Column(name = "target_currency")
    private String targetCurrency;

    @Column(name = "exchange_rate")
    private double exchangeRate;

    @Column
    private Date date;

    @PrePersist
    public void generateID() {            
        this.id = this.date.toString().replace("-", "") + sourceCurrency + targetCurrency;
    }
    //getters, setters
}

Когда я пытаюсь запустить свое приложение со свойством

spring.jpa.hibernate.ddl-auto=create

Я получил это исключение

Причина: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: указанный ключ был слишком длинным;максимальная длина ключа составляет 1000 байт

Похоже, я не могу использовать Spring в качестве своего идентификатора?Изменение типа на Long решает проблему, но я действительно хотел пойти с String с этим.Из того, что я искал, это должно быть полностью выполнимо.

1 Ответ

0 голосов
/ 10 декабря 2018

В соответствии с руководством https://www.tutorialspoint.com/hibernate/hibernate_annotations.htm, атрибут может быть определен аннотацией Column в деталях.

@ Аннотация колонки Аннотация @Column используется для указания деталейстолбец, в который будет отображено поле или свойство.Вы можете использовать аннотацию столбца со следующими наиболее часто используемыми атрибутами:

атрибут name позволяет явно указывать имя столбца.

атрибут length позволяет размер столбца, используемого для сопоставлениязначение, в частности, для строкового значения.

атрибут nullable позволяет пометить столбец NOT NULL при создании схемы.

уникальный атрибут позволяет пометить столбец как содержащий только уникальные значения.

Здесь для вашего вопроса важен параметр length, может быть, вы можете попробовать аннотировать свой идентификатор, как показано ниже:

  @Id
  @Column(length = 100)
  private String id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...