Saltar al contenido

¿Cómo actualizo una entidad usando spring-data-jpa?

Verificamos de forma exhaustivamente cada artículos en nuestra web con el objetivo de mostrarte siempre información más veraz y actualizada.

Solución:

La identidad de las entidades se define por su principal keys. Ya que firstname y lastname no son partes de la primaria keyno puedes decirle a JPA que trate Useres con lo mismo firstnamearena lastnames como iguales si tienen diferente userIds.

Por lo tanto, si desea actualizar un User identificado por su firstname y lastnamenecesitas encontrar eso User por una consulta, y luego cambie los campos apropiados del objeto que encontró. Estos cambios se enviarán automáticamente a la base de datos al final de la transacción, por lo que no es necesario que haga nada para guardar estos cambios de forma explícita.

EDITAR:

Quizás debería dar más detalles sobre la semántica general de JPA. Existen dos enfoques principales para el diseño de las API de persistencia:

  • enfoque de inserción/actualización. Cuando necesite modificar la base de datos, debe llamar a los métodos de la API de persistencia explícitamente: llama insert para insertar un objeto, o update para guardar el nuevo estado del objeto en la base de datos.

  • Enfoque de unidad de trabajo. En este caso tienes un conjunto de objetos. administrado por biblioteca de persistencia. Todos los cambios que realice en estos objetos se descargarán en la base de datos automáticamente al final de la Unidad de trabajo (es decir, al final de la transacción actual en el caso típico). Cuando necesite insertar un nuevo registro en la base de datos, haga el objeto correspondiente administrado. Administrado Los objetos se identifican por su principal keysde modo que si crea un objeto con primario predefinido key administradose asociará con el registro de la base de datos del mismo id, y el estado de este objeto se propagará automáticamente a ese registro.

JPA sigue el último enfoque. save() en Spring Data JPA está respaldado por merge() en simple JPA, por lo tanto hace que su entidad administrado como se describió anteriormente. Significa que llamar save() en un objeto con una identificación predefinida actualizará el registro de la base de datos correspondiente en lugar de insertar uno nuevo, y también explica por qué save() no se llama create().

Dado que la respuesta de @axtavt se centra en JPA no spring-data-jpa

Actualizar una entidad consultando y luego guardando no es eficiente porque requiere dos consultas y posiblemente la consulta puede ser bastante costosa ya que puede unirse a otras tablas y cargar cualquier colección que tenga fetchType=FetchType.EAGER

Spring-data-jpa admite la operación de actualización.
Debe definir el método en la interfaz del Repositorio y anotarlo con @Query y @Modifying.

@Modifying
@Query("update User u set u.firstname = ?1, u.lastname = ?2 where u.id = ?3")
void setUserInfoById(String firstname, String lastname, Integer userId);

@Query es para definir consultas personalizadas y @Modifying es para decir spring-data-jpa que esta consulta es una operación de actualización y requiere executeUpdate() no executeQuery().

Puede especificar otros tipos de devolución:
int – el número de registros que se actualizan.
boolean – true si hay un registro que se está actualizando. De lo contrario, false.


Nota: Ejecute este código en una Transacción.

Simplemente puede usar esta función con la función save() JPA, pero el objeto enviado como parámetro debe contener una identificación existente en la base de datos; de lo contrario, no funcionará, porque save() cuando enviamos un objeto sin identificación, agrega directamente una fila en base de datos, pero si enviamos un objeto con una identificación existente, cambia las columnas que ya se encuentran en la base de datos.

public void updateUser(Userinfos u) 
    User userFromDb = userRepository.findById(u.getid());
    // crush the variables of the object found
    userFromDb.setFirstname("john"); 
    userFromDb.setLastname("dew");
    userFromDb.setAge(16);
    userRepository.save(userFromDb);

valoraciones y comentarios

Puedes añadir valor a nuestra información contribuyendo tu veteranía en las críticas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *