带有liquibase @OneToMany映射的spring-boot

时间:2018-09-11 07:34:33

标签: spring-boot database-design liquibase liquibase-hibernate

我有两个实体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个表(例如在@OneToMany映射中生成休眠状态)。

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

2 个答案:

答案 0 :(得分:2)

如果该关系确实是一个OnToMany,则不需要第三张表。只需添加PrimaryKeyJoinColumn。

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

您可以使用@ManytoMany并在@jointable中添加有关您已加入表的信息

答案 1 :(得分:0)

好吧,在使用liquibase的情况下,我们必须手动创建第3个表并必须应用必要的约束。

创建用于管理映射的表


<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)确保Person的{​​{1}}在映射表中是唯一的

2)id的ID和ADDRESS的{​​{1}}之间的外键关系

3)PERSON_ADDRESS的ID和PERSON_ID的{​​{1}}之间的外键关系


PERSON

PERSON_ADDRESS

ADDRESS_ID