пружинный башмак с жидкостной базой @OneToMany mapping - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть две сущности Person и Address. И 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 голосов
/ 12 сентября 2018

Ну, в случае с жидкой базой, мы должны вручную создать 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 s id уникален в таблице сопоставления

2) Отношение внешнего ключа между идентификатором ADDRESS и PERSON_ADDRESS * PERSON_ID

3) Иностранныйключевые отношения между идентификатором PERSON и PERSON_ADDRESS ADDRESS_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" />
0 голосов
/ 11 сентября 2018

Если отношение действительно OnToMany, вам не нужна третья таблица. Просто добавьте PrimaryKeyJoinColumn.

Если адрес может многократно использоваться многими людьми, это отношение ManyToMany.

Вы можете использовать @ManytoMany и добавлять информацию о вашей объединенной таблице un @ jointable

...