сопоставить одну сущность с несколькими таблицами - PullRequest
0 голосов
/ 16 ноября 2018

Предположим, у нас есть две таблицы в нашей базе данных:

Персона

id, имя, фамилия, titleid (это fk to title.id)

title

id,name

Теперь мы хотим, чтобы в проекте весенней загрузки существовал объект или класс java с его классом jparepository:

Person

id, имя, фамилия, titleid, titleName (может быть @transient ?!) в нашей сущности лица, поля id, имя, фамилия, titleid сопоставлены сТаблица person и titleName сопоставляются с таблицей заголовков.

первый вопрос : нам нужно загрузить нашу сущность с помощью запроса на соединение (в одном запросе), но все запросы на сохранение, удаление выполняются как обычно.Таблица человека. Как это возможно? второй вопрос как мы можем написать именованный запрос и использовать его в нашем jparepository для загрузки только идентификатора и имени и игнорировать другие поля?

Спасибо

Ответы [ 2 ]

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

Вы можете использовать аннотации @Table и @SecondaryTable для сопоставления обеих таблиц с сущностью Person. Я объяснил, что более подробно в этом написано Hibernate Tip и в это видео .

Это отображение требует 2 простых шага:

  1. Вам нужно аннотировать вашу сущность с помощью JPA @Table и @SecondaryTable аннотации и предоставляют имена первых и Вторая таблица в качестве значения параметров имени. Вы также можете указать столбец соединения между этими двумя таблицами.
  2. Вам необходимо аннотировать каждый атрибут, который вы хотите отобразить, во вторичную таблицу. с аннотацией @Column и задайте имя дополнительной таблицы как значение атрибута таблицы.

Исходя из таблиц, упомянутых в вашем вопросе, ваше отображение должно выглядеть следующим образом:

@Entity
@Table(name = "person")
@SecondaryTable(name = "title", pkJoinColumns = @PrimaryKeyJoinColumn(name = "titleid", referencedColumnName = "id"))
public class Person {

    @Id
    @GeneratedValue
    private Long id;

    private String firstName;

    private String lastName;

    @Column(table = "title", name = "name")
    private String titleName;

    ...
}
0 голосов
/ 16 ноября 2018

Использовать отображение @OneToOne

так в вашем личном классе используйте

@ OneToOne частное название заголовка;

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