#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. В общем, это работает! Однако я не знаю, почему, но свойства перечислены в другом порядке, чем они объявлены в ключевом классе — похоже, что это… алфавитный? В любом случае заказ последовательный, так что для меня этого достаточно, спасибо!