Hibernate @OneToMany Отображение выборки записей - PullRequest
0 голосов
/ 14 сентября 2018

Я гуглил везде, но не смог получить то, что мне нужно Невозможно получить соответствующий вывод. У меня есть два класса Employee и EmployeeLocation и их соответствующие таблицы в SQL.

Это моя таблица для таблицы EmployeeLocation, несколько emp_ids

Table

MyScenario -> В таблице сотрудников идентификатор является первичным ключом и имеет уникальные значения, но в таблице EmployeeLocation этот идентификатор сотрудника имеет значение emp_id в таблице EmployeeLocation, которая не является уникальной и появляется несколько раз.

Я пытаюсь создать Ассоциацию @OnetoMany, но безуспешно. Помощь оценена.

class Employee {
     private integer id;
     @OneToMany(fetch=FetchType.EAGER,mappedBy="empId")
     private List<EmployeeLocation> employeeLocation;
     //getters and setters
}

 class EmployeeLocation {
      private integer id;
      private integer emp_id; 
      // emp_id is a primary key in employee table
      //fields  getters and setters 
}

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

На самом деле в EmployeeLocation вам нужна ссылка на сопоставленный Employee, а не emp_id, потому что сопоставление основано на сущности.

Так вот, что вам нужно:

EmplyeeLocation

class EmployeeLocation {

      @Id
      private int id;
      @ManyToOne(cascade = CascadeType.ALL)
      private Employee emp; 
}

Сотрудник:

class Employee {

     @Id
     private int emp_id;
     @OneToMany(fetch=FetchType.EAGER, mappedBy="emp")
     @JoinColumn(name = "emp_id")
     private List<EmployeeLocation> employeeLocation;
}

Примечание:

  • Не забудьте указать аннотацию @Id для полей id, чтобы объекты могут быть сопоставлены правильно.
  • Обратите внимание на типы, которые вы используете, Java чувствителен к регистру, нет типа integer, это либо int, либо Integer.
  • Обратите внимание, что рекомендуется использовать Set вместо List в отображения спящего режима для OneToMany.
0 голосов
/ 14 сентября 2018

Вам необходимо сопоставить некоторый атрибут employee на EmployeeLocation и JoinColumn для сопоставления emp_id, например:

@Entity
class Employee {
     @Id
     private Integer id;

     @OneToMany(fetch=FetchType.EAGER, mappedBy="employee") // refer to the atribute name of the entity Employee on the EmployeeLocation
     private List<EmployeeLocation> employeeLocation;
     //getters and setters
}

 @Entity
 class EmployeeLocation {

      @Id
      private Integer id;

      @JoinColumn(name = "emp_id") // name of the column on database table
      @ManyToOne(fetch = FetchType.LAZY, optional = false)
      private Employee employee; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...