powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Использую liquibase. Не создаётся второй внешний ключ в таблице.
6 сообщений из 6, страница 1 из 1
Использую liquibase. Не создаётся второй внешний ключ в таблице.
    #39311592
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Искал в сети ответы. Ничего пока найти не могу.

Автомобиль имеет поле: owner_id (собственник)
Если только одно это поле с внешним ключом, то всё работает.

Добавляю ещё одно поле: brand_id (производитель)

liquibase не может создать это поле и внешний ключ.

Для внешнего ключа используется одна и та же таблица (owner).
Вроде всё должно работать.

liquibase не любит то-же самый внешний ключ, но к другому полю в этой-же таблице?


liquibase Пишет:


автор1 change sets check sum
classpath:config/liquibase/changelog/20160919210642_added_entity_Car.xml::20160919210642-1::jhipster is now: 7:d4c2dde3b588a0639d4ebed2d4a4a89a


liquibase.exception.ValidationFailedException: Validation Failed:
1 change sets check sum
classpath:config/liquibase/changelog/20160919210642_added_entity_Car.xml::20160919210642-1::jhipster is now: 7:d4c2dde3b588a0639d4ebed2d4a4a89a



Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
    xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">
    <!--
        Added the constraints for entity Car.
    -->
    <changeSet id="20160919210642-2" author="jhipster">
        
        <addForeignKeyConstraint baseColumnNames="owner_id"
                                 baseTableName="car"
                                 constraintName="fk_car_owner_id"
                                 referencedColumnNames="id"
                                 referencedTableName="owner"/>

        <addForeignKeyConstraint baseColumnNames="brand_id"
                                 baseTableName="car"
                                 constraintName="fk_car_brand_id"
                                 referencedColumnNames="id"
                                 referencedTableName="owner"/>

    </changeSet>
</databaseChangeLog>
...
Рейтинг: 0 / 0
Использую liquibase. Не создаётся второй внешний ключ в таблице.
    #39311632
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nebo,

Вы не поняли самой идеи database migration. Нельзя изменять уже примененные change-set-ы. Нужно только создавать новые.
Liquibase в этом плане крутой - он хранит в БД checksum каждого примененного change-set-а и не даёт вам изменять уже существующие и примененные.

Если вы работаете один, или ещё не публиковали свои изменения, то можете дропнуть локальную базу и пересоздать.
Если же вы работаете в команде и предыдущую версию change-set-а опубликовали, то менять её нельзя. Нужно только добавлять новый.
...
Рейтинг: 0 / 0
Использую liquibase. Не создаётся второй внешний ключ в таблице.
    #39311636
vsl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
vsl
Гость
Neboliquibase не любит то-же самый внешний ключ, но к другому полю в этой-же таблице?

автор1 change sets check sum
classpath:config/liquibase/changelog/20160919210642_added_entity_Car.xml::20160919210642-1::jhipster is now: 7:d4c2dde3b588a0639d4ebed2d4a4a89a


Нет, liquibase не любит, когда кто-то вносит изменения в уже отработавший changeSet.

Правильное решение: перенесите второй addForeignKeyConstraint в новый changeSet. Вообще, примите за правило: одно действие — один changeSet. Убережёт от многих проблем.

Неправильных решений, требующих внесения изменений в БД руками, но при которых остаётся один changeSet — минимум два.
...
Рейтинг: 0 / 0
Использую liquibase. Не создаётся второй внешний ключ в таблице.
    #39311652
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо)

авторНет, liquibase не любит, когда кто-то вносит изменения в уже отработавший changeSet.

Дело в том, что это JHipster (когда он добавляет Entity и Relation) вносит изменение в changeSet.

я его руками не трогал)
...
Рейтинг: 0 / 0
Использую liquibase. Не создаётся второй внешний ключ в таблице.
    #39311653
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Файл: 20160919210642_added_entity_Car

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
    xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">

    <property name="now" value="now()" dbms="mysql,h2"/>
    <property name="now" value="current_timestamp" dbms="postgresql"/>
    <property name="now" value="sysdate" dbms="oracle"/>

    <property name="autoIncrement" value="true" dbms="mysql,h2,postgresql,oracle"/>

    <property name="floatType" value="float4" dbms="postgresql, h2"/>
    <property name="floatType" value="float" dbms="mysql, oracle"/>

    <!--
        Added the entity Car.
    -->
    <changeSet id="20160919210642-1" author="jhipster">
        <createTable tableName="car">
            <column name="id" type="bigint" autoIncrement="${autoIncrement}">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="car_no" type="varchar(255)">
                <constraints nullable="true" />
            </column>
            
            <column name="owner_id" type="bigint">
                <constraints nullable="true" />
            </column>

            <column name="brand_id" type="bigint">
                <constraints nullable="true" />
            </column>

            <!-- jhipster-needle-liquibase-add-column - Jhipster will add columns here, do not remove-->
        </createTable>
        
    </changeSet>
</databaseChangeLog>
...
Рейтинг: 0 / 0
Использую liquibase. Не создаётся второй внешний ключ в таблице.
    #39311661
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получилось) Спасибо за подсказки) Дальше буду читать. Пока сделал так:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
    xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">

    <property name="now" value="now()" dbms="mysql,h2"/>
    <property name="now" value="current_timestamp" dbms="postgresql"/>
    <property name="now" value="sysdate" dbms="oracle"/>

    <property name="autoIncrement" value="true" dbms="mysql,h2,postgresql,oracle"/>

    <property name="floatType" value="float4" dbms="postgresql, h2"/>
    <property name="floatType" value="float" dbms="mysql, oracle"/>

    <!--
        Added the entity Car.
    -->
    <changeSet id="20160919210642-1" author="jhipster">
        <createTable tableName="car">
            <column name="id" type="bigint" autoIncrement="${autoIncrement}">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="car_no" type="varchar(255)">
                <constraints nullable="true" />
            </column>
            
            <column name="owner_id" type="bigint">
                <constraints nullable="true" />
            </column>
            <!-- jhipster-needle-liquibase-add-column - Jhipster will add columns here, do not remove-->
        </createTable>
        
    </changeSet>
    
    <changeSet id="20160919210642-4" author="jhipster">
        
        <addColumn tableName="car">
            <column name="brand_id" type="bigint">
                <constraints nullable="true" />
            </column>
        </addColumn>        
        
    </changeSet>    
    
    
    
</databaseChangeLog>





и так:



Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
    xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">
    <!--
        Added the constraints for entity Car.
    -->
    <changeSet id="20160919210642-2" author="jhipster">
        
        <addForeignKeyConstraint baseColumnNames="owner_id"
                                 baseTableName="car"
                                 constraintName="fk_car_owner_id"
                                 referencedColumnNames="id"
                                 referencedTableName="owner"/>

    </changeSet>
    
    <changeSet id="20160919210642-3" author="jhipster">

        <addForeignKeyConstraint baseColumnNames="brand_id"
                                 baseTableName="car"
                                 constraintName="fk_car_brand_id"
                                 referencedColumnNames="id"
                                 referencedTableName="owner"/>

    </changeSet>    
    
</databaseChangeLog>
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Использую liquibase. Не создаётся второй внешний ключ в таблице.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]