Frühjahr JpaRepositroy.save() nicht erscheinen zu werfen Ausnahme auf duplizieren spart

Ich bin derzeit spielen etwa auf Spring boot 1.4.2 in die ich gezogen haben, in Spring-boot-starter-web-und Spring-boot-starter-PPV.

Mein Hauptproblem ist dass ich beim speichern einer neuen Person funktioniert es einwandfrei (alle cool).

Aber wenn ich speichern eines neuen product-Entität mit der gleichen id (zB ein doppelter Eintrag), ist es nicht eine exception werfen. Ich hatte erwartet, ConstrintViolationException oder etwas ähnliches.

Gegeben, die folgenden eingerichtet:

Application.java

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

ProductRepository.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();
    }
}

Hinweis JpaConfig.java und Application.java sind im gleichen Paket.

ProductController.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());
        }
    }
}

und schließlich Product.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;
}

Den getter -, setter-und equalsHashcode.. sind lombok Anmerkungen.

Sonstiges:

Spring boot : 1.4.2

Hibernate ORM: 5.2.2.LETZTE

Dieses Problem tritt unabhängig davon, ob ich mit dem controller mit oder ohne @Transactional

Der zugrunde liegende db zeigt die Ausnahme klar

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

Ich weiß, dass ist besser (häufiger) zu brechen, die die data access Zeug in seine eigene service-Ebene statt dumping es in der Steuerung

Die Semantik der controller nicht ReST

Dinge, die ich versucht habe:

Frühjahr CrudRepository Ausnahmen

Habe ich versucht, die Umsetzung der Antwort aus diese Frage, leider ist mein code nie trifft die DataAccesException Ausnahme

Tut Spring JPA wirft einen Fehler wenn die Funktion speichern nicht erfolgreich ist?

Wieder ähnliche Antwort auf die obige Frage.

http://www.baeldung.com/spring-dataIntegrityviolationexception

Habe ich versucht, indem die Bohne, um meine JPAconfig.java Klasse:

   @Bean
   public PersistenceExceptionTranslationPostProcessor exceptionTranslation(){
      return new PersistenceExceptionTranslationPostProcessor();
   }

Aber nichts schien zu passieren.

Sorry für den langen post, ty im Voraus

InformationsquelleAutor Verric | 2016-11-15
Schreibe einen Kommentar