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

Автомобиль имеет поле: 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
20.09.2016, 08:11
    #39311632
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использую liquibase. Не создаётся второй внешний ключ в таблице.
Nebo,

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

Если вы работаете один, или ещё не публиковали свои изменения, то можете дропнуть локальную базу и пересоздать.
Если же вы работаете в команде и предыдущую версию change-set-а опубликовали, то менять её нельзя. Нужно только добавлять новый.
...
Рейтинг: 0 / 0
20.09.2016, 08:25
    #39311636
vsl
vsl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использую liquibase. Не создаётся второй внешний ключ в таблице.
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
20.09.2016, 09:03
    #39311652
Nebo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использую liquibase. Не создаётся второй внешний ключ в таблице.
Спасибо)

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

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

я его руками не трогал)
...
Рейтинг: 0 / 0
20.09.2016, 09:08
    #39311653
Nebo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использую liquibase. Не создаётся второй внешний ключ в таблице.
Файл: 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
20.09.2016, 09:20
    #39311661
Nebo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использую liquibase. Не создаётся второй внешний ключ в таблице.
Получилось) Спасибо за подсказки) Дальше буду читать. Пока сделал так:

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


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