Cómo utilizar hibernación @DynamicUpdate con JPA datos de primavera?

Ravi desarrollador:

Estoy usando la primavera de datos JPA. Quiero actualizar sólo una columna.

Mi repositorio es;

public interface UserRepository extends JpaRepository<User,Long> {
}

Servicio es mi;

public User save(User user) {
    return userRepository.save(user);
}

Entidad mi;

@Entity
@DynamicUpdate(true)
public class User implements Serializable {
    // column definitions, etc.
}

¿Cómo puedo actualizar sólo una columna en User?

buræquete:

Su problema se debe a que su paso de una nueva Userentidad, por tanto, Hibernate no puede utilizar una versión en caché que ha sido ya leídos de la base de datos y decidir qué columnas para actualizar dinámicamente.

Por lo tanto, tratar de hacer lo siguiente para confirmar el correcto comportamiento de @DynamicUpdate;

En servicio;

@Transactional
public User save(User newUser) {
    User currentUser = userRepository.get(newUser.getId());
    // handle merging of updated columns onto currentUser manually or via some mapping tool
    currentUser.setName(newUser.getName());
    return userRepository.save(currentUser);
}

Con la lógica anterior, junto con la anotación de actualización dinámica, debe ser capaz de ver la actualización de la columna de nombre solamente, a menos que tenga activada alguna de auditoría, o el uso de @Versionla columna ed'.

Si las columnas actualizadas son siempre iguales, entonces es mejor usar updatable = falsepara las columnas que no son objetivo para la actualización en sus @Columndefiniciones, para el uso @DynamicUpdatees muy ineficiente ya que genera cada sql de nuevo, nunca se utiliza sqls en caché. Pero cuidado con esta función, ya que será incapaz de actualizar estas columnas en absoluto.

No recomiendo el uso @Querya menos que tenga un caso donde nativa JPA / Hibernate es insuficiente, pero si usted tiene un caso de uso para actualizar un conjunto de columnas de destino única, es la mejor opción, y la más eficiente.

Si las columnas actualizados son muchos y pueden variar en gran medida, ya sea definir una lógica de correlación manual entre newUsera la currentUser, o utilizar algunas herramientas de mapeo tales como Orika, tengo una estructura automatizada similar donde cientos de entidades están conectadas a través de estas mapeadores, lo que permite una manera extremadamente genérico para tratar varias operaciones CRUD.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=172559&siteId=1
Recomendado
Clasificación