jpa
От одного к одному
Поиск…
параметры
| аннотирование | Цель |
|---|---|
| @TableGenerator | Задает имя генератора и имя таблицы, где можно найти генератор |
| @GeneratedValue | Определяет стратегию генерации и ссылается на имя генератора |
| @Один к одному | Определяет отношения один к одному между сотрудником и рабочим столом, здесь Employee является владельцем отношения |
| mappedBy | Этот элемент предоставляется на обратной стороне отношения. Это позволяет использовать двунаправленную связь |
Отношение «один к одному» между сотрудником и столом
Рассмотрим взаимно однозначные отношения между сотрудником и рабочим столом.
Employee.java
@Entity
public class Employee {
@TableGenerator(name = "employee_gen", table = "id_gen", pkColumnName = "gen_name", valueColumnName = "gen_val", allocationSize = 100)
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "employee_gen")
private int idemployee;
private String firstname;
private String lastname;
private String email;
@OneToOne
@JoinColumn(name = "iddesk")
private Desk desk;
// getters and setters
}
Desk.java
@Entity
public class Desk {
@TableGenerator(table = "id_gen", name = "desk_gen", pkColumnName = "gen_name", valueColumnName = "gen_value", allocationSize = 1)
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "desk_gen")
private int iddesk;
private int number;
private String location;
@OneToOne(mappedBy = "desk")
private Employee employee;
// getters and setters
}
Тестовый код
/* Create EntityManagerFactory */
EntityManagerFactory emf = Persistence
.createEntityManagerFactory("JPAExamples");
/* Create EntityManager */
EntityManager em = emf.createEntityManager();
Employee employee;
employee = new Employee();
employee.setFirstname("pranil");
employee.setLastname("gilda");
employee.setEmail("sdfsdf");
Desk desk = em.find(Desk.class, 1); // retrieves desk from database
employee.setDesk(desk);
em.persist(employee);
desk = em.find(Desk.class, 1); // retrieves desk from database
desk.setEmployee(employee);
System.out.println(desk.getEmployee());
Диаграмма базы данных изображена ниже.
- Аннотации @JoinColumn переходят к отображению объекта, который сопоставляется с таблицей, содержащей объединение colulmn. Владелец отношений. В нашем случае таблица Employee имеет столбец join, поэтому @JoinColumn находится в поле «Рабочий стол» объекта Employee.
- Элемент mappedBy должен быть указан в ассоциации @OneToOne в объекте, обратном стороне отношения. т.е. объект, который не предоставляет столбец соединения по аспекту базы данных. В нашем случае Desk является обратным объектом.
Полный пример можно найти здесь
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow