JPA relations

JPA relations

Один ко многим

БД:

Branch. Справочная таблица реквизитов банка для денежных счетов.

ПолеТипОписаниеОграничения
id varchar(32) Город операционного офиса банка PK
bank varchar(256) Наименование офиса (для реквизитов перевода) not null
bik
varchar(9) БИК

Branch_Code. Справочная таблица соответствия города и кода отделения банка.

ПолеТипОписаниеОграничения

code
integer Код отделения PK
branch_id varchar(256) Город отделенияnot null
FK на branch.id
при удалении записи в branch производится каскадное удаление

Liquibase:

    <changeSet id="initial-1" author="knastnt">
        <createTable tableName="branch">
            <column name="id" type="varchar(32)">
                <constraints nullable="false" primaryKey="true" primaryKeyName="branch_pkey"/>
            </column>
            <column name="bank" type="varchar(256)">
                <constraints nullable="false"/>
            </column>
            <column name="bik" type="varchar(9)"/>
        </createTable>
    </changeSet>
    <changeSet id="initial-2" author="knastnt">
        <createTable tableName="branch_code">
            <column name="code" type="integer">
                <constraints nullable="false" primaryKey="true" primaryKeyName="branch_code_pkey"/>
            </column>
            <column name="branch_id" type="varchar(32)">
                <constraints
                        foreignKeyName="fk_branch_code_to_branch"
                        referencedColumnNames="id"
                        referencedTableName="branch"
                        deleteCascade="true"
                        nullable="false"
                />
            </column>
        </createTable>
    </changeSet>

Java:

@Entity
public class Branch {
    @Id
    private String id;
    private String bank;
    private String bik;

    @OneToMany(mappedBy = "branch_id")
    //По-умолчанию fetch=LAZY, но если нужно использовать EAGER,
    // то нужно использовать Set, т.к. элементы могут дублироваться!
    // https://stackoverflow.com/questions/20749806/duplicates-in-onetomany-annotated-list
    private List<BranchCode> branchCodes;
}

@Entity
public class BranchCode {
    @Id
    private Integer code;
    @ManyToOne(fetch = FetchType.LAZY, optional = false, cascade = CascadeType.REMOVE)
    @JoinColumn(name = "branch_id", referencedColumnName = "id")
    //name - имя столбца в своей таблице
    //referencedColumnName - имя id-переменной объекта на который ссылаемся
    private Branch branch;
}

Один ко многим без @Id

Один к одному

Один к одному без @Id

(Просмотрено 279 раз, 1 раз за сегодня)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *