2015-03-23 11 views
15

Utilizzo i repository di dati di primavera: cosa molto utile, ma ho riscontrato un problema. Sono facilmente in grado di aggiornare intera entità ma credo che sia inutile quando ho bisogno di aggiornare solo un singolo campo:Aggiornamento di un singolo campo utilizzando i dati di primavera jpa

@Entity 
@Table(schema = "processors", name = "ear_attachment") 
public class EARAttachment { 

    private Long id; 
    private String originalName; 
    private String uniqueName;//yyyy-mm-dd-GUID-originalName 
    private long size; 
    private EARAttachmentStatus status; 

per aggiornare Ho appena chiamata al metodo Save. Nel registro vedo il followwing:

batching 1 statements: 1: update processors.ear_attachment set message_id=100, 
original_name='40022530424.dat', 
size=506, 
status=2, 
unique_name='2014-12-16-8cf74a74-e7f3-40d8-a1fb-393c2a806847-40022530424.dat' 
where id=1 

Vorrei vedere qualche cosa come questa:

batching 1 statements: 1: update processors.ear_attachment set status=2 where id=1 

repository di Primavera hanno un sacco di strutture per selezionare qualcosa utilizzando le convenzioni di nome, forse c'è qualcosa di simile per aggiornamenti come updateForStatus (stato int);

risposta

22

si può provare qualcosa di simile:

@Modifying 
@Query("update EARAttachment ear set ear.status = ?1 where ear.id = ?2") 
int setStatusForEARAttachment(Integer status, Long id); 

È inoltre possibile utilizzare params con nome, in questo modo:

@Modifying 
@Query("update EARAttachment ear set ear.status = :status where ear.id = :id") 
int setStatusForEARAttachment(@Param("status") Integer status, @Param("id") Long id); 

Il valore di ritorno int è il numero di righe che dove aggiornato. È anche possibile utilizzare il reso void.

Ulteriori informazioni nella documentazione reference.

+0

Grazie, lavoro ora, ma mi chiedo se è meglio dell'utilizzo di entityManager.creatQuery (..)? Sto cercando qualcosa di sicuro –

+0

@DmitriiBorovoi Questo chiamerà anche 'em.createQuery', se non ricordo male, così è il samething. Se vuoi che qualcosa digiti sicuro, avrai bisogno di un modo per sapere quali attributi sono stati modificati per creare la query. Successivamente, è possibile utilizzare il repository personalizzato per eseguire la query (http://docs.spring.io/spring-data/data-jpa/docs/current/reference/html/#repositories.custom-implementations). –

Problemi correlati