2017-09-08 1 views
2

je créer méthode personnalisée dans le référentiel Spring@Query au printemps Repository pas mettre à jour les lignes et ne pas obtenir erreur

@Transactional 
@Modifying(clearAutomatically = true) 
@Query("UPDATE Order co SET co.orderStatus =:status WHERE co.orderStatus =:newStatus") 
int updateOrderStatus(@Param("status") OrderStatus status, @Param("newStatus") OrderStatus newStatus); 

et l'appeler en service:

log.info("started"); 
int i = orderRepository.updateOrderStatus(OrderStatus.CREATED, OrderStatus.PENDING); 
log.info("updates: " + i); 

Et je vois dans les journaux:

INF 15: 43: 45.102 a commencé
INF 15: 43: 46.035 mises à jour: 0

En DB, j'ai 3 lignes avec l'état CREATED. Je n'ai pas commis d'erreur et les lignes ne sont pas mises à jour.

@Column(name = "order_status") 
@Enumerated(EnumType.STRING) 
private OrderStatus orderStatus; 

findAllByOrderStatus(OrderStatus.CREATED) get 3 rows 

Répondre

2

Votre requête est l'inverse:

@Transactional 
    @Modifying(clearAutomatically = true) 
    @Query("UPDATE Order co SET co.orderStatus =:newStatus WHERE co.orderStatus =:status") 
    int updateOrderStatus(@Param("status") OrderStatus status, @Param("newStatus") OrderStatus newStatus); 
+0

une erreur idiote (((((((((((((((((((Merci – user5620472

+0

vous êtes bienvenue, ça arrive;) –