MySQL何时在Spring JPA上设置Id



我有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。

最新更新