Как я могу связать ненулевой самоссылающийся объект - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь связать таблицу выглядит следующим образом

some_id   BIGINT PK
parent_id BIGINT    NN '0'

Как видите,

  • Это похоже на самоссылающуюся сущность
  • Нет ФК для parent_id
  • parent_id не обнуляется и по умолчанию 0

Как я могу связать?

Хорошо ли следовать картированию?

class Some {

    @Id
    private Long id;

    @ManyToOne // optional?
    @JoinColumn(name = "parent_id", referencedColumnName = "some_id")
    private Some parent;
}

Как, другими словами, я могу сопоставить 0 с null?

1 Ответ

0 голосов
/ 06 ноября 2018

Думаю, лучше ужесточить существование корневого элемента, добавив корень в таблицу:

INSERT INTO some (some_id, parent_id) VALUES (0, 0);
COMMIT;

Таким образом, эта запись с some_id = 0 теперь будет служить корневым элементом, и любые ссылки с parent_id = 0 будут действительными.

Я не думаю, что есть способ сопоставить 0 с NULL - не с тем, как работает JPA, не с ссылочными идентификаторами.

...