По какой-то причине мое удаление не является каскадным, когда я пытаюсь удалить родительский элемент, в котором есть коллекция элементов, следующие два класса:
@Entity
@Table(name="Timestamps")
@JsonIgnoreProperties(ignoreUnknown = true)
public class ProductList {
private boolean success;
@Id
private Date lastUpdated;
private String time = "minute";
@ElementCollection
@MapKeyColumn(name="product_id")
@CollectionTable(name="Products")
private Map<String,Product> products;
И:
@Embeddable
@JsonIgnoreProperties(ignoreUnknown = true)
public class Product{
@Embedded
private Status quick_status;
В настоящее время это единственное поле, которое у меня есть в классе, потому что я удалил все остальные, пытаясь выяснить, почему при попытке удалить родительский объект удаление не происходит каскадно в таблице Products. Ниже приведен запрос, который я выполняю:
DELETE FROM Timestamps list WHERE list.last_updated !=0;
Значение last_updated всегда будет отличным от нуля, поэтому я просто использую этот запрос для проверки удаления, но даже когда я запускаю запрос в mysql Оболочка я получаю "Не удается удалить или обновить родительскую строку: ограничение внешнего ключа не удается" Я подумал, что аннотация elementcollection должна была автоматически каскадно, есть что-то, что мне не хватает?
EDIT, когда ниже приведены sql Команды, которые отправляет Hibernate, как вы заметите, на третьей отсутствует каскад.
Hibernate: create table products (product_list_last_updated datetime(6) not null, buy_price float not null, sell_price float not null, product_id varchar(255) not null, primary key (product_list_last_updated, product_id)) engine=InnoDB
Hibernate: create table timestamps (last_updated datetime(6) not null, success bit not null, time varchar(255), primary key (last_updated)) engine=InnoDB
Hibernate: alter table products add constraint FKo31ur4gpvx1d5720rgs3qaawi foreign key (product_list_last_updated) references timestamps (last_updated)
РЕДАКТИРОВАТЬ 2: Ниже приведен @Query, который я имею для класса ProductListRepository, который я включил на запрос, который имеет отношение к удалению.
@Repository
public interface ProductListRepository extends CrudRepository<ProductList, Integer>{
@Modifying
@Query(value = "DELETE FROM Timestamps list WHERE list.last_updated !=0", nativeQuery = true)
void deleteOld();
}