Что может привести к дублированию записей при данной конфигурации JPA? - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть две таблицы. Таблица A содержит первичный ключ, сгенерированный последовательностью. Таблица B предназначена для предоставления UUID для каждого первичного ключа, чтобы в таблице B была ровно одна запись, которая соответствует каждой записи в таблице A. У меня возникла эта проблема; однако, если в определенных обстоятельствах таблица B имеет 2 ссылки на одну запись из таблицы A. Следует отметить, что между этими двумя таблицами нет ограничений по внешнему ключу.

Duplication Example

TABLE_A                 TABLE_B
------------------  --------------------------------------------------
| MAIN_ID* | ... |  | MAIN_ID |                XREF_UID*             |
|     1    |-----|  |    1    | 58685ff9-4cee-426e-838f-fe44ab3696ed |
|     2    |-----|  |    2    | 91d48161-9583-41a5-a34e-d51a63b0a250 |
------------------  |    2    | bf33f0ce-9a44-4b3f-aabe-0f63608f7d27 |
                    --------------------------------------------------
@Entity
@Table(name = "TABLE_A")
public class MainEntity {

    @Id
    @SequenceGenerator(name = "FOO_GENERATOR",
            sequenceName = "FOO_SEQ_NR", allocationSize = 2)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "FOO_GENERATOR")
    @Column(name = "MAIN_ID", unique = true, nullable = false)
    private Long id;

    @OneToOne(mappedBy = "main", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private XrefEntity xref;
}


@Entity
@Table(name = "TABLE_B")
public class XrefEntity {

    @Id
    @Column(name = "MAIN_ID", nullable = false)
    private Long id;

    @Column(name = "XREF_UID", nullable = false, length = 36)
    private String uid;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "MAIN_ID")
    @MapsId
    private MainEntity main;
}

Учитывая данную конфигурацию , что может привести к тому, что в таблице B будут дубликаты?

...