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, т.к. элементы могут дублироваться!
    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

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

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

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