Пружинный башмак с жидкостной базой @OneToMany mapping

У меня два лица 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-ий стол (как Hibernate генерировать в @OneToMany отображение).

Как это сделать с liquibase-springboot?

2 ответа

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

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

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

Что ж, в случае с ликвидазой мы должны вручную создать третью таблицу и применить необходимые ограничения.

Создайте таблицу, которая управляет отображением:


<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 является уникальным в таблице сопоставления

2) отношение внешнего ключа между ADDRESSID и PERSON_ADDRESS"s PERSON_ID

3) отношения внешнего ключа между PERSONID и PERSON_ADDRESS"s 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" />
Другие вопросы по тегам