Вместо этого сгенерируйте UUID как Id при создании объекта с помощью @GeneratedValue - PullRequest
0 голосов
/ 25 февраля 2020

У меня возникла следующая проблема: до сих пор я создавал сущности, которые выглядели примерно так:

public class ExampleEntity {
  @Id
  @GeneratedValue(generator = "UUID")
  private UUID id;

  // Other properties...

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    ExampleEntity that = (ExampleEntity) o;
    return id.equals(that.id);
  }
}

Это работало нормально, пока мне недавно не пришлось сравнивать объекты, прежде чем они были сохранены в базе данных. , Я понял, что аннотация @GeneratedValue(generator = "UUID") генерирует UUID не при создании объекта (дух ...) и все идентификаторы равны null, если объект не представлен в базе данных.

Я сейчас ищу лучший способ инициализировать мои сущности с UUID как Id. Это достаточно или есть лучший способ сделать это?

public class ExampleEntity {
  @Id
  private UUID id = UUID.randomUUID();

  // Same as above...
}

1 Ответ

1 голос
/ 25 февраля 2020

Не совсем, потому что нет гарантии, что UUID.randomUUID() будет генерировать уникальные значения. Вам нужно будет вызвать базу данных (есть вероятность, что вам придется делать это несколько раз), чтобы выяснить, нет ли конфликта.

Я не уверен, почему генерация @ID в базе данных неправильно? Если вы хотите получить идентификатор вновь созданного объекта, просто позвоните:

exampleEntityRepository.save(new ExampleEntity()).getId();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...