Hibernate: создание уникального GenerateValue для каждой реляционной записи при вставке коллекций - PullRequest
0 голосов
/ 18 января 2020

Я использую 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.

Примечание. Выполнение вышеуказанной вставки при добавлении только одного комментария не приводит к ошибке.

...