Я занимаюсь разработкой веб-приложения, в котором я могу зарегистрировать человека. Код для формы регистрации приведен ниже.
<form method="post" modelAttribute="personForm" action="person/addPerson">
<div>
<!-- <input type="hidden" path="personid"> -->
<div class="row">
<div class="col">
<label for="inputFName" class="sr-only">First Name</label>
<input type="text" id="firstname" path="firstname" class="form-control" placeholder="First Name" required autofocus>
</div>
<div class="col">
<label for="inputLName" class="sr-only">Last Name</label>
<input type="text" id="lastname" path="lastname" class="form-control" placeholder="Last Name" required>
</div>
</div>
<br>
<div class="row no-gutters">
<label for="inputEmail" class="sr-only">Email address</label>
<input type="email" id="email" path="email" class="form-control" placeholder="Email address" required>
</div>
<br>
<div class="row">
<div class="col">
<label for="inputPassword" class="sr-only">Password</label>
<input type="password" id="password" path="password" class="form-control" placeholder="Password" required>
</div>
<div class="col">
<label for="inputRepeatPassword" class="sr-only">Repeat Password</label>
<input type="password" id="repeatpassword" path="repeatpassword" class="form-control" placeholder="Repeat Password" required>
</div>
</div>
</div>
<br>
<button class="btn btn-lg btn-primary btn-block" type="submit">Register</button>
</form>
Вот класс модели Person.
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "person")
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "personid")
private int personid;
@Column(name = "firstname")
private String firstname;
@Column(name = "lastname")
private String lastname;
@Column(name = "phone", nullable = true)
private String phone;
@Column(name = "homeaddress", nullable = true)
private String homeaddress;
@Column(name = "email")
private String email;
@Column(name = "password", nullable = true)
private String password;
public int getPersonid() {
return personid;
}
public void setPersonid(int personid) {
this.personid = personid;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getHomeaddress() {
return homeaddress;
}
public void setHomeaddress(String homeaddress) {
this.homeaddress = homeaddress;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Структура таблицы person выглядит следующим образом.
Это мой класс PersonController.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.travelx.travelx.model.Person;
import com.travelx.travelx.services.PersonService;
@Controller
@RequestMapping(value = "/person")
public class PersonController {
@Autowired
PersonService personService;
@RequestMapping(value="/addPerson", method=RequestMethod.POST)
public ModelAndView add(@ModelAttribute("personForm") Person person) {
personService.addPerson(person);
return new ModelAndView("redirect:/login");
}
}
А вот Класс PersonServiceImplementation.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.travelx.travelx.model.Person;
import com.travelx.travelx.repositary.PersonRepositary;
@Service
@Transactional
public class PersonServiceImplementation implements PersonService{
@Autowired
PersonRepositary personRepositary;
@Override
public void addPerson(Person person) {
personRepositary.save(person);
}
}
Когда я запускаю это веб-приложение, оно прекрасно работает до такой степени, что я могу ввести данные в мою форму. Когда я нажимаю кнопку отправки, браузер выдает ошибку:
не может выполнить инструкцию; SQL [н / д]; ограничение [ноль]; Вложенное исключение - org.hibernate.exception.ConstraintViolationException
В моем приложении Spring появляется сообщение об ошибке:
Hibernate: вставить в личность (электронная почта, имя, домашний адрес , фамилия, пароль, телефон) значения (?,?,?,?,?,?)
2020-04-24 10: 59: 52.902 WARN 2052 --- [nio -8080-exe c -3] ohengine.jdb c .spi.SqlExceptionHelper: SQL Ошибка: 1048, SQLState: 23000
2020-04-24 10: 59: 52.902 ОШИБКА 2052 --- [nio-8080-exe c -3] ohengine.jdb c .spi.SqlExceptionHelper: столбец 'email' не может быть пустым
2020-04-24 10: 59: 52.964 ОШИБКА 2052 --- [nio-8080-exe c -3] oa c. c. C. [. [. [/]. [DispatcherServlet ]: Servlet.service () для сервлета [dispatcherServlet] в контексте с путем [] вызвала исключение [Ошибка обработки запроса; вложенным исключением является org.springframework.dao.DataIntegrityViolationException: не удалось выполнить оператор; SQL [н / п]; ограничение [ноль]; вложенное исключение: org.hibernate.exception.ConstraintViolationException: не удалось выполнить оператор] с root причиной
java. sql .SQLIntegrityConstraintViolationException: столбец «email» не может быть пустым
Похоже, порядок столбцов в запросе неправильный. В чем проблема с этим делом? Может кто-нибудь помочь?