2016-11-20 1 views
1

отображений между 2 таблиц (департамент и Employee) следующим образом (ссылка на изображение, показывающее отображение также входит в комплект):Как показать 2 различные типы отображений между 2 классов сущностей, придерживая ссылаются друг на друга

  • В каждом отделе есть один и только один начальник отдела.
  • В каждом отделе может быть более одного сотрудника.
  • dept_id и empId являются первичными ключами соответствующих таблиц.
  • dept_head (это идентификатор сотрудника), а отделом являются внешние ключи их соответствующих таблиц.

Mapping Employee and Department table

Я создал классы сущностей для указанных выше таблиц 2 (структура приведена ниже).

Сотрудник класса: класс

public class Employee implements Serializable { 

private static final long serialVersionUID = 1L; 

@Id 
@Column(name = "empId") 
private Integer empId; 
@Size(max = 45) 
@Column(name = "name") 
private String name; 
@Size(max = 45) 
@Column(name = "address") 
private String address; 
@Size(max = 45) 
@Column(name = "grade") 
private String grade; 
@Size(max = 45) 
@Column(name = "email") 
private String email; 

@JoinColumn(name = "dept", referencedColumnName = "dept_id") 
@ManyToOne 
private Department deptartment; 
.. ... 
} 

Факультет:

public class Department implements Serializable { 

private static final long serialVersionUID = 1L; 
@Id 
@Basic(optional = false) 
@NotNull 
@Size(min = 1, max = 8) 
@Column(name = "dept_id") 
private String deptId; 
@Size(max = 45) 
@Column(name = "name") 
private String name; 

@JoinColumn(name = "dept_head", referencedColumnName = "empId") 
@OneToOne 
private Employee deptHead; 

@OneToMany(mappedBy = "deptartment") 
private List<Employee> employeeList; 
.... 
... 
} 

Если я добавляю mappedBy в Сотрудника класса (как я сделал в отделе), чтобы показать отображение OneToOne между EmpId и deptHead, код компилируется и работает. Однако, если я не добавляю оператор mappedBy в класс Employee, как показывает вышеприведенный код, код все еще компилируется и работает нормально.

Я хотел бы знать, почему приведенный выше код работает, даже если я не предоставляю mappedBy в классе сотрудников.

Если кто-нибудь может помочь мне очистить вышеупомянутые сомнения и объяснить логику его работы, было бы здорово, поскольку я новичок в этом.

ответ

0

Не совсем понятно, где вы пытались использовать его с атрибутом mappedBy.

Но если я правильно задаю вопрос, вы спрашиваете, почему у вас может быть только одна или обе стороны аннотированы?

Это зависит от того, какая сторона является источником и местом назначения вашего отношения или что-то двунаправленное. На стороне Java вы можете иметь отношение всегда в обоих направлениях из-за ссылок на объекты, но на стороне базы данных вы можете иметь ее только в одном направлении.

Отъезд JPA Wiki book по этой теме для получения более подробной информации.

Кроме того, API док для OneToOne состояний:

Определяет однозначную ассоциацию с другим объектом, который имеет один-к-одному множественность. Обычно нет необходимости указывать связанный объект-объектявно, так как обычно можно вывести из типа объекта, на который делается ссылка. Если отношение двунаправленное, сторона, не являющаяся владельцем, должна использовать элемент mappedBy в аннотации OneToOne, чтобы указать поле отношений или свойство стороны-владельца.

Смежные вопросы