Составные ключи Spring Data JPA и Liquibase многие ко многим - PullRequest
0 голосов
/ 26 сентября 2018

Я работаю с Spring Data JPA, используя Liquibase, у меня есть два класса, первый с простым ключом, а второй с составным ключом (отношения многие ко многим)

Первый класс:

public class Person {


@ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.MERGE })
    @JoinTable(name = "person_adress", joinColumns = { @JoinColumn(name = "person_id") }, inverseJoinColumns = {
            @JoinColumn(name = "adress_id"), @JoinColumn(name = "country") })
    private List<Adress> adresses;

// Other attributes
}

Второй класс:

public class Adress {


@EmbeddedId
    private AdressId adressId; // contains adress_id and country as composite key

@ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.MERGE }, mappedBy = "adresses")
    private List<Person> persons;
// Other attributes 

}

Файл Liquibase:

<changeSet id="......." author="........">
        <createTable tableName="person_adress">
            <column name="person_id" type="varchar(255)">
                <constraints nullable="false" />
            </column>
            <column name="adress_id" type="varchar(255)">
                <constraints nullable="false" />
            </column>
            <column name="country" type="varchar(2)">
                <constraints nullable="false" />
            </column>
        </createTable>
        <addUniqueConstraint
            columnNames="country, adress_id,person_id"
            constraintName="keey"
            tableName="person_adress" />
    </changeSet>

, когда я звонил в эту службу:

adress.add(ListOfPersons);
adressRepository.save(adress);

адрес былсохранился и список персон тоже, в postgresql, но проблема в том, что таблица person_adress по-прежнему пуста

Ответы [ 2 ]

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

Вы можете найти тот же подход (многие ко многим с дополнительным столбцом) по следующей ссылке:

Вместо использования @ManyToMany автор использует двунаправленный @OneToMany, определяющий дополнительный объект для представленияобъект корреляции с и @EmbeddedId (PostTag и PostTagId)

https://vladmihalcea.com/the-best-way-to-map-a-many-to-many-association-with-extra-columns-when-using-jpa-and-hibernate/

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

Вы можете увидеть этот пример для отображения многих на многие: https://dzone.com/articles/integrating-spring-data-jpa-postgresql-and-liquiba

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