Привет!
Нужно сделать так, чтобы удаленные записи не выкашивались из базы данных, чтобы потом можно было без возни с бэкапом посмотреть что случилось. Можно вот такую схему провернуть:
@Entity
@Where(clause = "deleted <> 1")
@Table(name = "X")
@SQLDelete(sql = "UPDATE X SET deleted = '1' WHERE id = ?")
public class X {
// внутри описание столбца deleted
}
Это вроде работает. Но еще хочется добавить к каждой записи ссылку на журнал history, в котором бы была, скажем дата создания (она же дата удаления, если запись удаленная). Тут начинается проблема. Если я описываю внутри класса History ссылку на любой объект (я хочу чтобы history был у всех)
Object entity;
@Column(name = "ENTITY")
@OneToOne
Object getEntity(){
return entity;
}
то hibernate начинает ругаться, что мол нужен конкретный экземпляр, а не Object. Это в общем-то логично. Выделять общего предка у всех "неудаляемых" объектов мне не очень хочется, потому что в таком случае, насколько я понимаю, в SQL либо будет одна таблица с диким количеством столбцов, либо одна дополнительная общая таблица. Это не очень подходит, т.к. база данных будет дополнительно читаться с помощью SQL, и это все усложнит. Можно ли подключить history через поле object_id, внутри которого указана сущность в виде "X.12341", где x -- название сущности?
Может быть есть какие-то другие решения этой задачи? Более изящное решение?