【问题标题】:Spring Data JPA & Liquibase composite key many to manySpring Data JPA & Liquibase 复合键多对多
【发布时间】:2018-09-26 15:01:02
【问题描述】:

我正在使用 Liquibase 处理 Spring Data JPA,我有两个类,第一个使用简单键,第二个使用复合键,(多对多关系)

头等舱:

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 表仍然为空的问题

【问题讨论】:

    标签: spring spring-boot spring-data-jpa liquibase


    【解决方案1】:

    您可以在以下链接中找到相同的方法(多对多和额外的列)。

    作者没有使用@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/

    【讨论】:

      【解决方案2】:

      您可以看到这个用于映射多对多的示例: https://dzone.com/articles/integrating-spring-data-jpa-postgresql-and-liquiba

      【讨论】:

      • 您好,欢迎来到 Stack Overflow!请务必引用重要链接中最相关的部分,以防目标站点无法访问或永久离线。查看更多关于写好答案的建议here
      猜你喜欢
      • 2019-10-01
      • 1970-01-01
      • 2016-01-31
      • 2015-05-10
      • 2018-10-31
      • 2016-06-03
      • 1970-01-01
      • 2017-10-28
      相关资源
      最近更新 更多