Это мой репозиторий:
@Repository
public interface ProductRepo extends CrudRepository<Product,Integer> {
public List<Product> findAll();
public Product findById(int id);
}
My Entity Bean:
@Entity
@Table(name = "product")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "product_id")
private Integer id;
@NotEmpty
@Column(name = "product_name")
private String productName;
Контроллер:
@PostMapping("/add-product")
String addProduct(@Validated @ModelAttribute("product")Product product, BindingResult bindingResult){
if (bindingResult.hasErrors()) {
System.out.println("has errors: " + bindingResult.toString());
}
System.out.println( "adding Product ..." );
productService.save(product);
return "redirect:/products/success";
Этомой взгляд
<form:form action="add-product" method="post" modelAttribute="product">
<label for="productName">Product Name</label>
<form:input path="productName" id="productName" type="text" placeholder="Add product name"/>
<form:errors path="productName" />
...
Он просто отлично работает при использовании Hibernate SessionFactory для хранения в базе данных, например:
// A shorter way to save customer
Session currentSession = sessionFactory.getCurrentSession();
currentSession.saveOrUpdate(customer);
, но при замене его на Spring Data JPA он начинает выдавать исключения ивозвращать 500 html-страниц вместо простого отображения поля ошибки, как это было раньше.
Выдается 4 исключения:
javax.validation.ConstraintViolationException: Validation failed for classes [com.luv2code.springdemo.entity.Product] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='must not be empty', propertyPath=productName, rootBeanClass=class com.luv2code.springdemo.entity.Product, messageTemplate='{javax.validation.constraints.NotEmpty.message}'}
]
javax.persistence.RollbackException: Error while committing the transaction
org.hibernate.internal.ExceptionConverterImpl.convertCommitException(ExceptionConverterImpl.java:77)
org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:71)
org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:536)
org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction
Ранее, без использования JPA, сообщение об ошибке проверки показывалось впредставление <form:errors />
, не выбрасываемое как исключение с кодом ошибки 500 http.Что мне здесь не хватает?