Как связать сущность из одной таблицы в другую? - PullRequest
0 голосов
/ 03 февраля 2020

Как я могу связать сущность, которая уже существует в другой таблице, с моей important_table? Я мог бы вставить идентификатор, но тогда это потребовало бы запроса. Я хочу, чтобы система автоматически отображала элемент в people_table на important_table.

@Entity(name = "important_table")
data class ImportantEntity(
        @Id @GeneratedValue @Column(name = "id")
        val id: Short = 0,

        @Embedded
        val person: Person
)

Лицо сущности

@Entity(name = "person_table")
data class PersonEntity(
        @Id @GeneratedValue @Column(name = "id")
        val id: Long = 0,
        ...
)

Я пытался встроить, но это создает дубликат Лица в БД. Мне нужна ссылка, чтобы я мог легко найти «важных» людей и при этом получить те же данные.

1 Ответ

0 голосов
/ 03 февраля 2020

Используйте отображение @OneToOne, чтобы Hibernate (или любой ORM) знал, что вы связываете таблицы вместе.

@Entity(name = "important_table")
data class ImportantEntity(
        @Id @GeneratedValue @Column(name = "id")
        val id: Short = 0,

        @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
        val person: Person
)

Когда вы говорите: I could insert the ID but then that would require a query, действительно, это так ... Но с FetchType.EAGER ваш ORM выполнит дополнительный запрос для вас ... Это прозрачно.

Тем не менее, будьте осторожны с этим, если вы не обращаете внимания на ваши отношения, вы можете в конечном итоге загрузить всю БД в память ...

Как объяснено на этом сайте и это туто , @Embedded используется, чтобы помочь иметь хорошее и чистое определение объекта, тогда как сохраняет данные в одной таблице вместо 2 ... Например в вашем случае вы будете хранить данные из класса Person в таблице ImportantTable.

Надеюсь, это поможет!

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