Научная статья на тему 'Создание связей в hibernate'

Создание связей в hibernate Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
145
40
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
HIBERNATE / ФРЕЙМВОРК / JAVA / СВЯЗЬ / БАЗА ДАННЫХ / ВНЕШНИЙ КЛЮЧ / АННОТАЦИЯ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Рубашенков Антон Михайлович, Бобров Андрей Виорелович

С помощью фреймворка hibernate открывается возможность удобно работать с базой данных из приложения. Одним из примеров работы с данным фреймворком является описание связей между сущностями в приложении. Hibernate работает только с языком программирования Java, поэтому его реализацию будем рассматривать на данном языке.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Создание связей в hibernate»

2. Материал из Википедии — свободной энциклопедии [Электронный ресурс]. -Режим доступа: https://ru.wikipedia.org/wiki/Балансировка_нагрузки (дата обращения 28.04.2019).

3. [Электронный ресурс]. - Режим доступа: https://habr.com/ru/company/selectel/blog/250201/ (дата обращения 22.04.2019).

СОЗДАНИЕ СВЯЗЕЙ В HIBERNATE

1 2 Рубашенков А.М. , Бобров А.В.

1Рубашенков Антон Михайлович - студент; 2Бобров Андрей Виорелович - студент, кафедра защиты информации, Институт комплексной безопасности и специального приборостроения, Российский технологический университет, г. Москва

Аннотация: с помощью фреймворка hibernate открывается возможность удобно работать с базой данных из приложения. Одним из примеров работы с данным фреймворком является описание связей между сущностями в приложении. Hibernate работает только с языком программирования Java, поэтому его реализацию будем рассматривать на данном языке.

Ключевые слова: hibernate, фреймворк, Java, связь, база данных, внешний ключ, аннотация.

УДК 004.031.2

Создание связи один ко многим

Создадим 2 таблицы: client (клиент) и act (акт). Добавим им атрибуты, клиенту: name и surname; акту: denomination и date. Клиент заполняет акт, он может работать с несколькими актами, соответственно от клиента к акту идёт связь «один ко многим». [1] При создании данной связи в таблице act появляется внешний ключ act_client_id, как показано на рисунке 1.

client

client Jd; INTEGER NOT NULL 1 PK !

name: WRCHflRdOOJ surname: VARCHAR(IOO) H---

act

I---

□Ctjd: INTEGER MOT NULL ( PK |

denomination: vAfttHAftf 100J date: VARCHARUOQ)

act client id; IMTSiSSft NOT NULL ( FK |

Рис. 1. Схема связи «Один ко многим» между клиентом и актом

На основе данной схемы создадим 2 класса QientEntity и ActEntity.

Опишем связь в классе ActEntity.

Для этого создадим переменную clientEntity, в ней будет храниться клиент, привязанный к данному акту. [2]

private ClientEntity clientEntity;

Далее опишем саму связь.

Параметр fetch обозначает силу связи, выбираем сильную связь, так как в других типах в данном случае нет необходимости. Параметр cascade указывает каскадная ли связь, в данном случае связь каскадная. [3]

Аннотация @JoinColumn используется для указания связи, где параметр name означает имя внешнего ключа.

@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) @JoinColumn(name = "act_client_id")

getClientEntity(){ this.clientEntity;

clientEntity)

{

clientEntity;

Создадим setter и getter для задания клиента, к которому привязан данный акт, и для получения этого клиента соответственно. public ClientEntity

return

}

public void setClientEntity(ClientEntity

this.clientEntity =

}

Опишем связь в классе ClientEntity.

Для этого создадим Set actEntities, в нём будут храниться все акты, связанные с данным клиентом.

private Set<ActEntity> actEntities = new HashSet<>(); Далее опишем саму связь.

В ней добавляется атрибут mappedBy, он определяет связь клиента с актом, где clientEntity содержится в классе ActEntity и указывает на клиента, с которым связан акт.

@OneToMany (fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "clientEntity")

Создадим setter и getter для задания списка актов, связанного с данным клиентом, и для получения списка данных актов соответственно.

public Set<ActEntity> getActEntities() {

return actEntities;

}

public void setActEntities(Set<ActEntity> actEntities) {

this.actEntities = actEntities;

}

Создание связи многие ко многим

Создадим 2 таблицы: act (акт) и employee (сотрудник). Добавим им атрибуты, сотруднику: name и surname; акту: denomination и date. С каждым актом может работать несколько сотрудников, и каждый сотрудник может работать с несколькими актами, поэтому между ними нужно организовать связь многие ко многим. Чтобы создать такую связь нужно прибегнуть к использованию ещё одной таблицы act_employee, в ней содержатся 2 внешних ключа: mm_employee_id и mm_act_id. Также данные внешние ключи должны являться ещё и первичными, как показано на рисунке 2.

Рис. 2. Схема связи "Многие ко многим"между актом и сотрудником

На основе данной схемы создадим 2 класса ClientEntity и ActEntity.

Опишем связь в классе ActEntity.

Для этого создадим Set employeeEntities, в нём будут храниться все сотрудники, связанные с данным актом. [4]

private Set<EmployeeEntity> employeeEntities = new HashSet<>();

Далее опишем саму связь.

Выбираем сильную, каскадную связь, так как в других типах в данном случае нет необходимости.

Аннотация @JoinTable обозначает, что акт и сотрудник организуют связь «многие ко многим» через таблицу «act_employee». Название данной таблицы указывается в параметре «name», параметр «joinColumns» обозначает внешний ключ в таблице

act_employee для акта, а параметр «inverseJoinColumns» обозначает внешний ключ в таблице act_employees для сотрудника, который связан с данным актом.

@ManyToMany (fetch = FetchType.EAGER, cascade = CascadeType.ALL) @JoinTable(

name = "act_employee",

joinColumns = {@JoinColumn(name = "mm_act_id")},

inverseJoinColumns = {@JoinColumn(name = "mm_employee_id")}

)

Создадим setter и getter для задания списка сотрудников, связанного с данным актом, и для получения списка данных сотрудников соответственно.

public Set<EmployeeEntity> getEmployeeEntities() {

return employeeEntities;

}

public void setEmployeeEntities(Set<EmployeeEntity> employeeEntities) { this.employeeEntities = employeeEntities;

}

Опишем связь в классе EmployeeEntity

Для этого создадим Set employeeEntities, в нём будут храниться все сотрудники, связанные с данным актом.

private Set<ActEntity> actEntities = new HashSet<>(); Далее опишем саму связь.

Выбираем сильную, каскадную связь, так как в других типах в данном случае нет необходимости.

Аннотация @JoinTable обозначает, что акт и сотрудник организуют связь «многие ко многим» через таблицу «act_employee». Название данной таблицы указывается в параметре «name», параметр «joinColumns» обозначает внешний ключ в таблице act_employee для сотрудника, а параметр «inverseJoinColumns» обозначает внешний ключ в таблице act_employees для акта, который связан с данным сотрудником.

@ManyToMany (fetch = FetchType.EAGER, cascade = CascadeType.ALL) @JoinTable(

name = "act_employee",

joinColumns = {@JoinColumn(name = "mm_employee_id")}, inverseJoinColumns = {@JoinColumn(name = "mm_act_id")}

)

Создадим setter и getter для задания списка актов, связанного с данным сотрудником, и для получения списка данных актов соответственно.

public Set<ActEntity> getActEntities() {

return actEntities;

}

public void setActEntities(Set<ActEntity> actEntities) {

ШБ.асШпШеБ = actEntities;

}

Список литературы

1. [Электронный ресурс]. Режим доступа: https://habr.com/ru/post/115777/ (дата обращения 03.05.2019).

2. Материал из Википедии — свободной энциклопедии [Электронный ресурс]. -Режим доступа: https://ru.wikipedia.org/wiki/Hibemate_(библиотека) (дата обращения 10.03.2019).

3. [Электронный ресурс]. Режим доступа: https://www.baeldung.com/hibernate-one-to-many (дата обращения 16.04.2019).

4. [Электронный ресурс]. Режим доступа: https://www.baeldung.com/hibernate-many-to-many (дата обращения 25.04.2019).

СКВОЗНОЕ ШИФРОВАНИЕ 1 2 Чичикин Г.Я. , Семёнов Д.А.

1Чичикин Гордей Ярославович - студент;

2Семёнов Дмитрий Андреевич - студент, кафедра защиты информации, Институт комплексной безопасности и специального приборостроения, Российский технологический университет, г. Москва

Аннотация: в этой статье мы рассмотрим, что такое сквозное шифрование и какие преимущества оно предлагает по сравнению с обычным шифрованием. Сквозное шифрование — это безопаснейший способ общения в частном порядке в интернете. Зашифровывая сообщения на обоих концах разговора, сквозное шифрование предотвращает чтение личных сообщений кем-либо перехватившим данные. До недавнего времени сквозное шифрование (Е2ЕЕ) было единственным видом шифрования из-за сложных операций, необходимых для его использования. Тем не менее, последние технологические достижения сделали сквозное шифрование намного более доступным в использовании.

Ключевые слова: сквозное шифрование, защита информации, обмен сообщениями.

Сквозное шифрование (Е2ЕЕ) — это система связи, в которой только пользователи могут читать сообщения. В принципе, это не позволяет потенциальным прослушивателям-включая провайдеров связи, интернет - провайдеров и даже провайдера услуг связи-получить доступ к криптографическим ключам, необходимым для расшифровки разговора. [1]

Во многих системах обмена сообщениями, включая электронную почту и многие чат-сети, сообщения проходят через посредников и хранятся третьей стороной, из которой они извлекаются получателем. Даже если сообщения зашифрованы, они обычно шифруются только "в пути" и хранятся в расшифрованном виде третьей стороной. Это позволяет третьей стороне предоставлять поисковые и другие функции или сканировать незаконный и неприемлемый контент, но также означает, что они могут быть прочитаны и использованы любым, кто имеет доступ к сохраненным сообщениям в сторонней системе, будь то по дизайну или через бэкдор. Это можно рассматривать как проблему во многих случаях, когда конфиденциальность очень важна, например, лица, живущие под репрессивными правительствами, информирование, массовое наблюдение, предприятия, чья репутация зависит от его способности защищать данные третьих сторон, переговоры и коммуникации, которые достаточно важны, чтобы иметь риск целенаправленного "взлома", и где затрагиваются такие чувствительные темы, как здоровье, сексуальность и информация о несовершеннолетних.

Сквозное шифрование предназначено для предотвращения чтения или скрытого изменения данных, кроме как истинным отправителем и получателем(получателями). Сообщения шифруются отправителем, но у третьей стороны нет средств для их расшифровки, и она хранит их в зашифрованном виде. Получатель извлекает зашифрованные данные и расшифровывает их самостоятельно.

i Надоели баннеры? Вы всегда можете отключить рекламу.