update query example ejemplo data java spring spring-data updates spring-data-jpa

java - query - Actualizar solo campo usando datos de primavera jpa



spring data query native (2)

Estoy usando los repositorios de Spring-data, algo muy conveniente, pero me enfrenté a un problema. Fácilmente puedo actualizar la entidad completa, pero creo que no tiene sentido cuando necesito actualizar solo un campo:

@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;

para actualizar acabo de llamar método guardar. En el registro veo el siguiente:

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

Me gustaría ver algo como esto:

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

Los repositorios de Spring tienen muchas facilidades para seleccionar algo usando las convenciones de nombres, tal vez haya algo similar para actualizar como updateForStatus (estado int);


Hibernate ofrece la anotación @DynamicUpdate. Todo lo que necesitamos hacer es agregar esta anotación en el nivel de la entidad:

@Entity(name = "EARAttachment ") @Table(name = "EARAttachment ") @DynamicUpdate public class EARAttachment { //Code omitted for brevity }

Ahora, cuando use EARAttachment.setStatus(value) y ejecute "CrudRepository" save(S entity) , actualizará solo el campo en particular. Por ejemplo, se ejecuta la siguiente instrucción UPDATE:

UPDATE EARAttachment SET status = 12, WHERE id = 1


Puedes probar algo como esto:

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

También puedes usar params nombrados, como este:

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

El valor de retorno int es el número de filas que se actualizaron. También puede utilizar el retorno void .

Ver más en la documentación de reference .