Spring JpaRepositroy.save() 似乎没有在重复保存时抛出异常
我目前正在玩Spring boot 1.4.2,其中我已经拉入了Spring-boot-starter-web和Spring-boot-starter-jpa。
我的主要问题是,当我保存一个新实体时,它工作正常(都很酷)。
但是,如果我保存具有相同ID的新产品实体(例如重复的条目),它不会引发异常。我期待ConstrintViolationException或类似的东西。
给定以下设置:
应用.java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
产品存储库.java
@Repository
public interface ProductRepository extends JpaRepository<Product, String> {}
JpaConfig.java
@Configuration
@EnableJpaRepositories(basePackages = "com.verric.jpa.repository" )
@EntityScan(basePackageClasses ="com.verric.jpa")
@EnableTransactionManagement
public class JpaConfig {
@Bean
JpaTransactionManager transactionManager() {
return new JpaTransactionManager();
}
}
注意:JpaConfig.java 和 Application.java位于同一包中。
产品控制器.java
@RestController
@RequestMapping(path = "/product")
public class ProductController {
@Autowired
ProductRepository productRepository;
@PostMapping("createProduct")
public void handle(@RequestBody @Valid CreateProductRequest request) {
Product product = new Product(request.getId(), request.getName(), request.getPrice(), request.isTaxable());
try {
productRepository.save(product);
} catch (DataAccessException ex) {
System.out.println(ex.getCause().getMessage());
}
}
}
最后是产品.java
@Entity(name = "product")
@Getter
@Setter
@AllArgsConstructor
@EqualsAndHashCode(of = "id")
public class Product {
protected Product() { /* jpa constructor*/ }
@Id
private String id;
@Column
private String name;
@Column
private Long price;
@Column
private Boolean taxable;
}
getter, setter and equalsHashcode..是龙目岛注释。
杂项:
弹簧靴 : 1.4.2
休眠 ORM: 5.2.2.最终版
无论我是否使用或不带注释控制器,都会发生此问题@Transactional
基础数据库清楚地显示异常
2016-11-15 18:03:49 AEDT [40794-1] verric@stuff ERROR: duplicate key value violates unique constraint "product_pkey"
2016-11-15 18:03:49 AEDT [40794-2] verric@stuff DETAIL: Key (id)=(test001) already exists
我知道将数据访问内容分解到自己的服务层中更好(更常见),而不是将其转储到控制器中
控制器的语义不是 ReST
我尝试过的事情:
Spring CrudRepository exceptions
我尝试过实现这个问题的答案,不幸的是,我的代码从未遇到过DataAccesException异常。
对上述问题也同样作出类似答复。
http://www.baeldung.com/spring-dataIntegrityviolationexception
我尝试将bean添加到我的JPAconfig.java类,即:
@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation(){
return new PersistenceExceptionTranslationPostProcessor();
}
但似乎什么也没发生。
很抱歉发了很久的帖子,提前