Как @SQLDelete, мягкое удаление, сущность с составным ключом

#java #spring-boot #hibernate #spring-data-jpa

Вопрос:

как получить фрагменты составного ключа @SQLDelete для выполнения мягкого удаления объекта?

 @Data
class DummyKey {
    private Long foo;
    private Long bar;
}


@IdClass(DummyKey.class)
@SQLDelete(sql = "UPDATE dummy SET deleted = 'Y' WHERE ???") //how to get key params
@Where(clause = "deleted='N'")
class Dummy {
    @Id
    @Column(name = "foo")
    private Long foo;
    @Id
    @Column(name = "bar")
    private Long bar;

    @Column(name = "stuff")
    private String stuff;

    @Column(name = "deleted")
    private String deleted;
}
 

Ответ №1:

Значения составного идентификатора привязаны к подготовленному оператору в порядке свойств IdClass , поэтому это должно работать:

@SQLDelete(sql = "UPDATE dummy SET deleted = 'Y' WHERE foo=? AND bar=?")

( AbstractEntityPersister Делегирует привязку к типу идентификатора, поэтому в данном случае к ComponentType которому выполняется перебор свойств с помощью AbstractComponentTuplizer )

Комментарии:

1. В общем, это работает! Однако я не знаю, почему, но свойства перечислены в другом порядке, чем они объявлены в ключевом классе — похоже, что это… алфавитный? В любом случае заказ последовательный, так что для меня этого достаточно, спасибо!