tutorial mundo instalar hola curso application java hibernate orm soft-delete mappedsuperclass

java - mundo - Hibernate: cómo buscar solo objetos no eliminados lógicamente



hola mundo hibernate netbeans (1)

OMI, la forma más fácil de implementar un borrado suave sería agregar un indicador en sus entidades y usar:

  • la anotación @SQLDelete para anular la delete predeterminada de Hibernate (y realizar una actualización del indicador)
  • la @Where (o @Filters ?) en sus entidades y asociaciones para filtrar las entidades eliminadas

Sin embargo, no estoy seguro de cómo esto puede encajar con su tabla de Auditing . Se requieren algunas exploraciones y pruebas adicionales.

Recursos

Casi todas las tablas de nuestra base de datos tienen un FK en la tabla de auditoría que registra el estado creado, actualizado y eliminado (fecha y nombre de usuario).

Mapeamos la tabla de auditoría a la clase de Auditoría y la usamos así:

@MappedSuperclass public class BusinessObject extends DataObject { private static final long serialVersionUID = -1147811010395941150L; @OneToOne(fetch = FetchType.EAGER, cascade = { CascadeType.ALL }) @JoinColumn(name = "AUD_ID") private AuditingObject auditing; ...

Como era de esperar, casi todas las entidades se extienden desde BusinessObject.

¿Hay una manera fácil de decir, para cada objeto de negocio, solo recibir "auditing.deleted is null".

Intenté agregar @Where y @WhereJoinTable en businessObject, pero parece que esto no funciona como esperaba.

Actualmente, he hecho esto para una de mis consultas y esto funciona, pero odiaría hacer esto para todas las consultas ya que tenemos alrededor de 150.

@NamedQuery( name="allCountries", query="SELECT c FROM Country c" + " LEFT JOIN FETCH c.labelDefinition " + " LEFT JOIN FETCH c.labelDefinition.translations " + " WHERE c.auditing.deleted is null" + " ORDER BY c.code" )