我有Spring应用程序。每个员工都有Id。这是MySQL自动生成的。当我在createEmployeeForm.html中注册Employee信息时,我认为它的Id是由MySQL生成的。但它不起作用。我应该在哪里修理它?
型号
@Table(name = "employees")
@Entity
@Getter
@Setter
public class Employee {
@Id
@Column(name = "emp_id", length = 8)
@GeneratedValue(strategy = GenerationType.IDENTITY) // Id is auto-generated.
private long empId;
@Column(name = "emp_code", length = 20, nullable = false)
private String empCode;
@Column(name = "emp_name", length = 20, nullable = false)
private String empName;
@Column(name = "emp_phone", length = 16)
private Integer empPhone;
}
控制器
@Controller
public class EmloyeeController {
@Autowired
EmployeeRepository empRepository;
@Autowired
EmployeeService empService;
@GetMapping("/employees/new")
public String initCreationForm(Model model) {
Employee employee = new Employee();
model.addAttribute("employee", employee);
return "view/createEmployeeForm";
}
@PostMapping("/employees/new")
public String processCreationForm(Employee employee, EmployeeForm empForm, BindingResult result, Model model) {
if (result.hasErrors()) {
return "view/createEmployeeForm";
} else {
employee.setEmpCode(empForm.getEmpCode());
employee.setEmpName(empForm.getEmpName());
employee.setEmpPhone(empForm.getEmpPhone());
empRepository.save(employee);
model.addAttribute("employee", employee);
return "redirect:/employees/show/{empId}"; // This code need Employee Id.
}
}
}
index.html
<a class="btn btn-default" th:href="@{/employees/new}">新規登録</a>
createEmployeeForm.html
<form th:object="${employee}" class="form-horizontal"
id="add-owner-form" method="post">
<div class="form-group has-feedback">
<input
th:replace="~{fragments/inputField :: input ('コード', 'empCode', 'text')}" />
<input
th:replace="~{fragments/inputField :: input ('名前', 'empName', 'text')}" />
<input
th:replace="~{fragments/inputField :: input ('電話', 'empPhone', 'text')}" />
</div>
<p>
<input type="submit" value="従業員情報の登録" />
</p>
</form>
[![在此输入图像描述][1]][1]
错误代码
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Model has no value for key 'empId'
java.lang.IllegalArgumentException: Model has no value for key 'empId'
文件夹结构[1] :https://i.stack.imgur.com/TJdMf.png
我使用MySQL。下面是属性文件。在启动Spring应用程序之前,我键入一个命令在MySQL中创建数据库,然后由应用程序生成表。
application.properties
### MySQL
spring.datasource.url=jdbc:mysql://localhost/library_system?useSSL=false&useUnicode=true&characterEncoding=utf8
spring.datasource.username=test
spring.datasource.password=test
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database=MYSQL
spring.jpa.hibernate.ddl-auto=update
我完全解决了这个问题。
@PostMapping("/employees/new")
public String processCreationForm(Employee employee, EmployeeForm empForm, BindingResult result, Model model) {
if (result.hasErrors()) {
return "view/createEmployeeForm";
} else {
...
empRepository.save(employee);
model.addAttribute("employee", employee);
return "redirect:/employees/show/{empId}"; // This code is mistaken. }
返回值应重定向:/employees/show/"+employee.getEmpId((;。
application.properties
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
我添加了此代码。我可以得到员工Id。