Ссылка на таблицу в JPA - PullRequest
       2

Ссылка на таблицу в JPA

0 голосов
/ 12 сентября 2018

У меня проблема с JPA и спящим режимом, которую я не могу понять.Я получил две отдельные сущности с данными, и я хочу читать / записывать данные в table2 из таблицы table1.

Таблица 1

@Entity
@Table(name = "table1")
@Data
public class Table1{

    @ManyToMany(cascade = {
        CascadeType.PERSIST,
        CascadeType.MERGE
    })
    @JoinTable(
        name = "table2",
        joinColumns = @JoinColumn(name = "tableId", referencedColumnName =  "id"))
    private List<Table2> data = new ArrayList<>();
}

Таблица 2

@Entity
@Table(name = "table2")
@Data
public class Table2{

    private String name;
    private String address;
}

Поэтому, когда я обновляю table1 и она содержит имя иадрес, который я хочу записать в table2, и когда таблица 1 извлекается, я хочу обслуживать все имена и адреса в списке вместе с объектом.Как я могу добиться этого с JPA и Hibernate?

1 Ответ

0 голосов
/ 13 сентября 2018

Я считаю, что вы пытаетесь сделать отношение один-ко-многим, а не многие-ко-многим, как видно из ваших аннотаций. Отношение «многие ко многим» - это когда вы используете третью таблицу для соединения двух, в которой просто есть id-пары для обеих таблиц.

@Entity
@Table(name = "table1")
@Data
public class Table1{

    @OneToMany(cascade = {
        CascadeType.PERSIST,
        CascadeType.MERGE
    }, orphanRemoval = true)
    private List<Table2> data = new ArrayList<>();
}

Вам необходимо сослаться на объект Table1 в Table2

@Entity
@Table(name = "table2")
@Data
public class Table2{

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "table1_id")
    private Table1 owner;

    private String name;
    private String address;
}

Я добавил это orphanRemoval = true, потому что без этого люди часто путаются, что они что-то удалили из списка, но это все равно будет в следующий раз, когда они получат данные. Это было то, что спецификации JPA пропустили до версии 2.1.

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