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 раз за сегодня)