Hibernate: как автоматически сгенерировать идентификатор, который представляет собой базовую строку из 36 - PullRequest
0 голосов
/ 11 июля 2020

Как мне go вокруг автоматического создания @Id, которое не является Integer/Long значением, а String, которое является числом в базе 36?

например, если следующий id должен быть 58490, атрибут String id должен быть 194q.

@Entity
@Table(name = "persons")
public class Person  {
  @Id
  //?
  private String id;

  @Column
  private String name;
...
}
+--------+--------+
| base10 | base36 |
+--------+--------+
|    ... | ...    |
|  58490 | 194q   |
|  58491 | 194r   |
+--------+--------+

, чтобы фактическая таблица persons выглядела так:

+------+------+
|  id  | name |
+------+------+
| ...  | ...  |
| 194q | John |
| 194r | Jack |
+------+------+

1 Ответ

1 голос
/ 11 июля 2020

Вы можете создать собственную аннотацию. Создание пользовательской аннотации и размещение вашего logi c в этой аннотации.

Другой способ - написать конвертер:

public class DecimalToHexConverter implements AttributeConverter<String, String> {


    @Override
    public String convertToDatabaseColumn(String attribute) {

        // convert to hex
        return object;
    }

    @Override
    public String convertToEntityAttribute(String dbData) {
        // convert back to decimal
        return object;
    }
}

Затем примените этот конвертер на вашем id.

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