У меня есть проект, в котором мне запрещено удалять записи.Вместо этого мы мягко удаляем их, обновляя столбец (deleteFlag) в БД, который является общим для всех сущностей.Я пытаюсь добиться этого, используя JPA в общем виде, и я хотел бы получить решение JPA, если это возможно.deleteFlag - это флаг мягкого удаления, установленный в Y или N.
Код, который я написал до сих пор:
Базовый класс, который расширяют все сущности:
@MappedSuperclass
public class BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "CREATED_BY_C")
private String createdByC;
@Column(name = "CREATED_DATE_DT", updatable = false, insertable = false)
private Timestamp createdDateDt;
@Column(name = "UPDATE_DATE_DT", updatable = false, insertable = false)
private Timestamp updateDateDt;
@Column(name = "UPDATED_BY_C")
private String updatedByC;
@Column(name = "DELETE_FLG")
private String deleteFlag;
//getters and setters
BaseRepo, который расширяют все CrudRepos:
@NoRepositoryBean
public interface BaseCrudRepository<T extends BaseEntity, ID extends Serializable>, CrudRepository<T, ID> {
@Override
@Query("select e from #{#entityName} e where e.deleteFlag !='Y'")
public List<T> findAll();
//Look up deleted entities
@Query("select e from #{#entityName} e where e.deleteFlag ='Y'")
public List<T> recycleBin();
//Soft delete.
@Query("update #{#entityName} e set e.deleteFlag='Y' where e.id=:id")
@Modifying
@Transactional
public void softDelete(@Param("id")Integer id);
}
Образец объекта, который я связываю с мягким удалением:
@Entity
@Table(name = "SOME_PARENT_TABLE", schema = "SOME_SCHEMA")
public class SomeParentTable extends BaseEntity {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "id_field")
private Integer someParentTableId;
//more fields here
//bi-directional many-to-one association to SomeChildTable
@OneToMany(mappedBy = "sdIncomingTransaction", , cascade=CascadeType.ALL)
private List<SomeChildTable> someChildTables;
, поэтому, когда я делаю это:
someParentTableRepository.softDelete(someParentTableId);
толькофлаг удаления someParentTable помечен буквой Y. Однако мне бы хотелось, чтобы все связанные с ним SomeChildTable также были удалены программным способом.
Есть ли способ добиться этого?Я использую данные весны jpa.Не стесняйтесь спрашивать более подробную информацию, если требуется.