Я пишу простое приложение, использующее весеннюю загрузку, hibernate, mysql db, jsp. У меня есть две таблицы сотрудников и employee_vacation. У сотрудников есть столбцы:
имя сотрудника, фамилия сотрудника, дата сотрудника_фирмы, должность сотрудника, зарплата сотрудника, имя сотрудника, имя сотрудника, пароль сотрудника. employee_vacation имеет столбцы: id_vacation, employee_login, отпуск.
Я хочу объединить данные двух таблиц в JSP. Точнее, отобразите таблицу employee и employee_vacation на одной и той же странице jsp, но вместо таблицы employee_login enter code here
employee_vacation, которая является ключевым ключом, ссылается на employee employee_login, отображаются имя и фамилия этого сотрудника. Возможно ли это сделать с помощью JpaRepository, операций crud, инструментов контроллера или синтаксического анализа json, или это невозможно?
Мои таблицы:
create table employees ( employee_name varchar (40), employee_surname varchar (40),employee_date_of_birth date, employee_profession varchar (40), employee_salary int (20), employee_email varchar (20) not null,
employee_login varchar (20) not null unique, employee_password varchar (20), employee_role int (3) default 2, primary key (employee_login));
-
create table employee_vacation (id_vacation int (40) not null auto_increment,employee_login varchar (40) not null, vacation varchar (40), primary key (id_vacation), foreign key (employee_login) references employees (employee_login));
My Entities:
@Entity
@Table(name = "EMPLOYEES")
public class Employee {
@Column(name = "employee_name")
private String employeeName;
@Column(name = "employee_surname")
private String employeeSurname;
@Column(name = "employee_date_of_birth")
private Date employeeDateOfBirth;
@Column(name = "employee_profession")
private String employeeProfession;
@Column(name = "employee_salary")
private String employeeSalary;
@Column(name = "employee_email")
private String employeeEmail;
@Id
@Column(name = "employee_login" )
private String employeeLogin;
@Column(name = "employee_password")
private String employeePassword;
@Column(name = "employee_role")
private Integer employeeRole;
@OneToMany(mappedBy="employee")
private List<EmployeeVacation> vac;
....
table EMPLOYEE_VACATION
@Entity
@Table(name = "EMPLOYEE_VACATION")
public class EmployeeVacation {
@Id
@Column(name = "id_vacation")
private Integer idVacation;
@Column(name = "employee_login" , insertable = false, updatable = false )
private String employeeLogin;
@Column(name = "vacation")
private String vacation;
@ManyToOne
@JoinColumn(name = "employee_login")
private Employee employee;
...
service layers:
@Service
@Transactional
public class EmployeeService {
@Autowired
EmployeeRepository rep;
public Employee saveEmployeeServ(Employee empl) {
Employee savedEmpl = rep.saveAndFlush(empl);
return savedEmpl;
}
public List<Employee> showEmployeesServ() {
return rep.findAll();
}
public Employee getEmployeeServ(String id) {
Optional<Employee> empl = rep.findById(id);
Employee employee = empl.get();
return employee;
}
...
}
@Service
@Transactional
public class EmployeeVacationService {
@Autowired
EmployeeVacationRepository rep;
@Autowired
EmployeeRepository rep1;
public List<EmployeeVacation> showEmployeeVacationServ() {
return rep.findAll();
}
public EmployeeVacation getEmployeeVacationServ(Integer id) {
Optional<EmployeeVacation> empl = rep.findById(id);
EmployeeVacation employeeVacation = empl.get();
return employeeVacation;
}
public String getLoginEmployeeServ(Integer id) {
Optional<EmployeeVacation> empl = rep.findById(id);
EmployeeVacation employeeVacation = empl.get();
return employeeVacation.getEmployeeLogin();
}
...
controller:
@Controller
public class AdminController {
@Autowired
EmployeeService serv;
@Autowired
EmployeeVacationService servVac;
@GetMapping("/welcome")
public ModelAndView index() {
ModelAndView mod = new ModelAndView("welcome");
return mod;
}
@ModelAttribute(name = "employeeList")
public List<Employee> getListEmployee() {
List<Employee> employeeList = serv.showEmployeesServ();
return employeeList;
}
@ModelAttribute(name = "employee")
private Employee getEmptyEmployee() {
return new Employee();
}
@ModelAttribute(name = "employeeList1")
public List<EmployeeVacation> getListEmployee1(Model model) {
List<EmployeeVacation> employeeVacList = servVac.showEmployeeVacationServ();
return employeeVacList;
}
@ModelAttribute(name = "employeeVacation")
private EmployeeVacation getEmptyEmployee1() {
return new EmployeeVacation();
}
}
jsp:
<h1>Employees</h1>
</div>
<table align="center">
<tr>
<th>
<p>Name</p>
</th>
<th>
<p>Surname</p>
</th>
<th>
<p>Date of birth</p>
</th>
<th>
<p>Profession</p>
</th>
<th>
<p>Salary</p>
</th>
<th>
<p>Email</p>
</th>
<th>
<p>Login</p>
</th>
<th>
<p>Password</p>
</th>
<th>
<p>Role</p>
</th>
</tr>
<c:forEach items="${employeeList}" var="employee">
<tr>
<td>${employee.employeeName}</td>
<td>${employee.employeeSurname}</td>
<td>${employee.employeeDateOfBirth}</td>
<td>${employee.employeeProfession}</td>
<td>${employee.employeeSalary}</td>
<td>${employee.employeeEmail}</td>
<td>${employee.employeeLogin}</td>
<td>${employee.employeePassword}</td>
<td>${employee.employeeRole}</td>
<td><a
href="<c:url value="/page_empl_for_admin/${employee.employeeLogin}" />">change
data</a></td>
</tr>
</c:forEach>
</table>
<div class="center">
<h1>Employee vacation</h1>
</div>
<table align="center">
<tr>
<th>
<p>Name</p>
</th>
<th>
<p>Surname</p>
</th>
<th>
<p>Vacation</p>
</th>
</tr>
<c:forEach items="${employeeList1}" var="employeeVacation" >
<tr>
<td>${employeeVacation.idVacation}</td>
<td>${employeeVacation.employeeLogin}</td>
<td>${employeeVacation.vacation}</td>
</tr>
</c:forEach>
</table>