Я использую Hibernate для вставки сущностей, например так:
Я вставляю одну сущность post
, которая владеет коллекцией comment
сущностей. Я пытаюсь вставить новый post
с двумя новыми comment
сущностями, но не могу сгенерировать уникальные идентификаторы для каждой comment
сущности.
// Create post.
final String title = "unit test TITLE";
final String content = "unit test CONTENT";
Post post = new Post();
post.setTitle(title);
post.setContent(content);
// Crate comments.
final String author1 = "unit test AUTHOR 1";
final String content1 = "unit test CONTENT 1";
final String author2 = "unit test AUTHOR 2";
final String content2 = "unit test CONTENT 2";
Comment comment1 = new Comment();
Comment comment2 = new Comment();
comment1.setAuthor(author1);
comment1.setContent(content1);
comment2.setAuthor(author2);
comment2.setContent(content2);
// Add comments to post
post.getComments().add(comment1);
post.getComments().add(comment2);
// Save posts.
postRepository.save(post);
Каждая сущность имеет поле id
например:
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
Поскольку вставка выполняется в одной транзакции, id
для каждого комментария одинакова, что приводит к ошибке:
ERROR: duplicate key value violates unique constraint "comments_pkey"
Как мне аннотировать или настроить поле id
в сущности comment
, чтобы я мог вставлять несколько комментариев, не используя один и тот же автоматически сгенерированный идентификатор для каждого?
Одно решение, которое я подумал of использует UUID
s, но даже тогда я не уверен, будут ли они другими.
Примечание: последовательность по умолчанию берется из hibernate_sequence
. Не проблема, что обе записи происходят из этой последовательности, и я могу получить эти последовательности из их таблиц с указанием c последовательностей (comment_id_seq
и post_id_seq
), однако это не решает проблему вставки каждого комментария с то же самое id
.
Примечание. Выполнение вышеуказанной вставки при добавлении только одного комментария не приводит к ошибке.