Запросы на мягкое удаление Hibernate возвращают удаленных внуковJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Запросы на мягкое удаление Hibernate возвращают удаленных внуков

Сообщение Anonymous »


Во многих случаях в моем приложении я хочу вернуть дерево данных, используя отношения @OneToMany и @ManyToOne. Я реализую мягкое удаление с помощью @SQLDelete. @Где аннотации. Я не могу понять, как запретить дереву возвращать обратимо удаленные дочерние объекты.

Например, моя родительская сущность...

@Entity @Table(name = "gson_test_parent") @SQLDelete(sql = "ОБНОВЛЕНИЕ gson_test_parent SET удалено = true, delete_at = now() ГДЕ id=?") @Where(пункт = "удален = ложь") публичный класс GsonTestParent расширяет SoftDeletableEntity { общедоступная статическая окончательная строка STATUS_NEW = «новый»; общедоступная статическая окончательная строка STATUS_ACTIVE = «активный»; общедоступная статическая окончательная строка STATUS_DISABLED = «отключено»; @Разоблачать частное имя строки; @Разоблачать @OneToMany(fetch = FetchType.EAGER, mappedBy="gsonTestParentId") частный список gsonTestParentToGsonTestChild = новый ArrayList(); публичная строка getName() { вернуть имя; } public void setName (имя строки) { это.имя = имя; } общедоступный список getGsonTestParentToGsonTestChild() { вернуть gsonTestParentToGsonTestChild; } } ... моя сущность объединения...

@Entity @Table(name = "gson_test_parent_to_gson_test_child") @SQLDelete(sql = "ОБНОВЛЕНИЕ gson_test_parent_to_gson_test_child SET удалено = true, delete_at = now() ГДЕ id=?") @Where(пункт = "удален = ложь") общественный класс GsonTestParentToGsonTestChild расширяет SoftDeletableEntity { общедоступная статическая окончательная строка STATUS_ACTIVE = «активный»; общедоступная статическая окончательная строка STATUS_DISABLED = «отключено»; @Разоблачать частный длинный gsonTestParentId; @Разоблачать @Переходный @GsonExcludeBackReference частный GsonTestParent gsonTestParent; @Разоблачать @ManyToOne(fetch = FetchType.EAGER) @Where(пункт = "удален = ложь") частный GsonTestChild gsonTestChild; public Long getGsonTestParentId() { вернуть gsonTestParentId; } общественный GsonTestParent getGsonTestParent() { вернуть gsonTestParent; } public void setGsonTestParent(GsonTestParent gsonTestParent) { this.gsonTestParent = gsonTestParent; } общественный GsonTestChild getGsonTestChild() { вернуть gsonTestChild; } } ... и дочерний объект...

@Entity @Table(name = "gson_test_child") @SQLDelete(sql = "ОБНОВЛЕНИЕ gson_test_child SET удалено = true, delete_at = now() ГДЕ id=?") @Where(пункт = "удален = ложь") публичный класс GsonTestChild расширяет SoftDeletableEntity { общедоступная статическая окончательная строка STATUS_NEW = «новый»; общедоступная статическая окончательная строка STATUS_ACTIVE = «активный»; общедоступная статическая окончательная строка STATUS_DISABLED = «отключено»; @Разоблачать частное имя строки; публичная строка getName() { вернуть имя; } public void setName (имя строки) { это.имя = имя; } } К вашему сведению, все они расширяют SoftDeletableEntity, который выглядит как...

@MappedSuperclass публичный класс SoftDeletableEntity расширяет BaseEntity { общественный SoftDeletableEntity () { супер(); } @Разоблачать защищенная временная метка удаленаAt; защищенное логическое значение удалено = Boolean.FALSE; общественная отметка времени getDeletedAt() { вернуть удаленный At; } public void setDeletedAt (метка времени deleteAt) { this.deletedAt = deleteAt; } общедоступное логическое значение getDeleted() { возврат удален; } public void setDeleted (логическое значение удалено) { this.deleted = удалено; } } Когда я нахожу родительский объект...

@GetMapping(path="/{id}") public ResponseEntity get(@PathVariable Long id) выдает BaseException { Map responseMap = new HashMap(); GsonTestParent gsonTestParent = gsonTestParentService.find(id); responseMap.put("действие", "Получить"); responseMap.put("сообщение", "Объект получен"); responseMap.put("entityType", "GsonTestParent"); responseMap.put("entity", gsonTestParent); вернуть ответService.success(responseMap); } Я получаю дочерний объект (внук), хотя он помечен как удаленный в базе данных...

{ "полезная нагрузка": { "entityType": "GsonTestParent", "действие": "Получить", "message": "Объект получен", "сущность": { "имя": "test_parent_1", "gsonTestParentToGsonTestChild": [ { «gsonTestParentId»: 1, "gsonTestChild": { "name": "test_child_1", "deletedAt": "2022-07-26T04:31:30.000", "идентификатор": 1, "createAt": "2022-07-22T07:24:15.000", "updatedAt": "2022-07-22T07:24:15.000", "статус": "активен" }, «deletedAt»: ноль, "идентификатор": 1, "createAt": "2022-07-22T07:57:46.000", "updatedAt": "2022-07-22T07:57:46.000", "статус": "активен" } ], «deletedAt»: ноль, "идентификатор": 1, "createAt": "2022-07-22T07:23:15.000", "updatedAt": "2022-07-22T07:23:15.000", "статус": "активен" } }, "статус": "успех" } Запись gson_test_child в БД

mysql> select * from gson_test_child, где id = 1; +----+---------------------+---------------------+ ---------------------+---------+--------+--------- -----+ | идентификатор | создано_в | обновлено_в | удалено_в | удалено | статус | имя | +----+---------------------+---------------------+ ---------------------+---------+--------+--------- -----+ | 1 | 2022-07-22 14:24:15 | 2022-07-22 14:24:15 | 2022-07-26 11:31:30 | 1 | активный | test_child_1 | +----+---------------------+---------------------+ ---------------------+---------+--------+--------- -----+ Несколько комментариев:
[*]Я явно ссылаюсь на таблицу соединения, а не на использование функции @JoinTable, поскольку многие таблицы «объединения» в моем приложении имеют другие значимые поля, которые я хочу предоставить. [*]Я думал, что аннотация @Where в поле GsonTestParentToGsonTestChild.gsonTestChild исключит обратимо удаленные дочерние элементы, но, видимо, нет (или я делаю что-то неправильно). [*]Я знаю, что могу создавать явные собственные запросы JOIN FETCH в репозиториях, которые будут фильтровать удаленных внуков, но это как бы подрывает причины использования аннотаций.
Пожалуйста, дайте мне знать, если я могу предоставить дополнительную информацию.
Майк
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • «Мягкое удаление» в Hibernate с сопоставлением OneToOne
    Anonymous » » в форуме JAVA
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Мягкое удаление .net Core и уникальные ограничения с MySql
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • EF Core: мягкое удаление с консервативной последовательности
    Anonymous » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Мягкое удаление с консервативной последовательности
    Anonymous » » в форуме C#
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Мягкое удаление с консервативной последовательности
    Anonymous » » в форуме C#
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»