Assuming I have the following table.
And my entity
for AUDITING purpose, hard delete is not encouraged.
thus, when deleting a record, the ITEM_STAUS changes to 2 (deleted).
and I have the following status code
0 - active
1 - inactive
2 - deleted
To achieve this, we need a custom DescriptorCustomizer for the particular entity.
The DescriptorCustomizer will execute update sql on deletion instead of delete sql
Finally, add @AdditionalCriteria to entity
the @AdditionalCriteria annotation will always filter out the items with itemStatus = 2.
meaning all soft-deleted items are ignored, thus users only can see active records from the UI.
whereas, the soft-deleted records are still exist in DB for auditing purpose.
Done!!
And my entity
@Entity
@Table(name="ITEM")
public class Item {
private Long itemId;
private String itemName;
private Integer itemStatus;
// getter and setter
}
for AUDITING purpose, hard delete is not encouraged.
thus, when deleting a record, the ITEM_STAUS changes to 2 (deleted).
and I have the following status code
0 - active
1 - inactive
2 - deleted
To achieve this, we need a custom DescriptorCustomizer for the particular entity.
The DescriptorCustomizer will execute update sql on deletion instead of delete sql
public class SoftDeleteCustomizer implements DescriptorCustomizer {
public void customize(ClassDescriptor descriptor) {
descriptor.getQueryManager()
.setDeleteSQLString("Update ITEM set ITEM_STATUS = 2 where ITEM_ID = #ITEM_ID");
}
}
and add the SoftDeleteCustomizer to the Item entity.
@Entity
@Table(name="ITEM")
@Customizer(SoftDeleteCustomizer.class)
public class Item {
////
}
Finally, add @AdditionalCriteria to entity
@Entity
@Table(name="ITEM")
@Customizer(SoftDeleteCustomizer.class)
@AdditionalCriteria("this.itemStatus <> 2")
public class Item {
////
}
the @AdditionalCriteria annotation will always filter out the items with itemStatus = 2.
meaning all soft-deleted items are ignored, thus users only can see active records from the UI.
whereas, the soft-deleted records are still exist in DB for auditing purpose.
Done!!
No comments:
Post a Comment