Как избежать проверки автоматически сгенерированных значений по идентификатору с помощью Hibernate - PullRequest
0 голосов
/ 29 мая 2020

У меня есть следующее объявление таблицы:

CREATE TABLE `chat_session` (
 `session_id` BINARY(36) NOT NULL COMMENT 'Chat session identifier',
 ...
 PRIMARY KEY (`session_id`)

и следующий класс:

@ToString()
@EqualsAndHashCode(doNotUseGetters = true)
@Entity
@Table(name = "chat_session")
public class ChatSession {

    @Id
    @Column(name = "session_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private String sessionId;

, который при сохранении превращается в следующую ошибку:

javax.persistence.PersistenceException: org.hibernate.HibernateException: The database returned no natively generated identity value

на самом деле, я не хочу изменять схему, и мне нужно вводить в свои сущности правильные значения, а не автоматически сгенерированные. Могу я это сделать?

1 Ответ

0 голосов
/ 30 мая 2020

Если вы не можете изменить схему базы данных, вам необходимо вручную сгенерировать уникальный идентификатор и назначить его для новых сущностей.

Вы можете сделать это, просто удалив @GeneratedValue:

@Entity
@Table(name = "chat_session")
public class ChatSession {

    @Id
    @Column(name = "session_id")
    private String sessionId;
}

Проконсультируйтесь с бизнес-требованиями, чтобы узнать, есть ли какие-либо правила относительно формата идентификатора. Если да, реализуйте его и вручную сгенерируйте новый идентификатор и самостоятельно установите его для нового объекта. Если у вас нет такого бизнес-правила, вы можете просто использовать генератор UUID из Java, чтобы убедиться, что сгенерированный идентификатор уникален:

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