spring-使用 liquibase @OneToMany 映射启动

spring-boot with liquibase @OneToMany mapping

我有两个实体 PersonAddress。而Person可以有多个Address.

<createTable tableName="ADDRESS">
            <column name="id" type="bigint(20)" autoIncrement="true">
                <constraints primaryKey="true" nullable="false" />
               ... //columns
            </column>
</createTable>

<createTable tableName="PERSON">
            <column name="id" type="bigint(20)" autoIncrement="true">
                <constraints primaryKey="true" nullable="false" />
               ... //columns
            </column>
</createTable>

    <addForeignKeyConstraint
        constraintName="fk_constraint_worker_phone_number"
        referencedTableName="CONTACT_NUMBER" baseColumnNames="ContactNumbers"
        baseTableName="WORKER" referencedColumnNames="id" />

我想要第 3 个 table(就像 @OneToMany 映射中的休眠生成)。

如何使用 liquibase-springboot 执行此操作?

如果关系确实是 OnToMany,则不需要第三个 table。只需添加 PrimaryKeyJoinColumn.

如果地址可以被多人重复使用,就是多对多关系。

您可以使用@ManytoMany 并添加有关您加入的信息 table un @jointable

好吧,如果是 liquibase,我们必须手动创建第三个 table 并且必须应用必要的约束。

创建管理映射的 table :


<createTable tableName="PERSON_ADDRESS">
    <column name="PERSON_ID" type="BIGINT">
        <constraints primaryKey="true" nullable="false" />
    </column>
    <column name="ADDRESS_ID" type="BIGINT">
        <constraints primaryKey="true" nullable="false" />
    </column>
</createTable>

应用约束:

1) 确保 Persons id 在映射 table

中是唯一的

2) ADDRESS的id和PERSON_ADDRESSPERSON_ID

的外键关系

3) PERSON的id和PERSON_ADDRESSADDRESS_ID

的外键关系
<addUniqueConstraint
            columnNames="PERSON_ID" tableName="PERSON_ADDRESS"
            constraintName="UK_PHONE_NUMBERS_ID" />

<addForeignKeyConstraint
            constraintName="FK_ADDRESS_PERSON_ADDRESS"
            referencedTableName="ADDRESS"
            baseColumnNames="ADDRESS_ID"
            baseTableName="PERSON_ADDRESS" referencedColumnNames="id" />

<addForeignKeyConstraint
            constraintName="FK_PERSON_PERSON_ADDRESS"
            referencedTableName="PERSON"
            baseColumnNames="PERSON_ID"
            baseTableName="PERSON_ADDRESS" referencedColumnNames="id" />