У меня есть сопоставление ManyToOne, и я хочу удалить все дочерние элементы при удалении Parent. К сожалению, @OnDelete (action = OnDeleteAction.CASCADE) создает ограничение внешнего ключа (on delete = restrict), которое является значением по умолчанию для детский стол.
Класс сущности:
@Entity
@Table(name = "location_poc")
public class LocationPOC {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false, unique = true)
private Integer id;
@Column(name = "contactname", nullable=false)
private String contactname;
@Column(name = "email", nullable=true)
private String email;
@Column(name = "phone", nullable=true)
private String phone;
@Column(name = "title", nullable=false)
private String title;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "locationID", referencedColumnName = "locationID")
@OnDelete(action = OnDeleteAction.CASCADE)
private Location location;
Создать выписку:
CREATE TABLE `location_poc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`contactname` varchar(50) NOT NULL,
`email` varchar(100) DEFAULT NULL,
`phone` varchar(50) DEFAULT NULL,
`title` varchar(50) NOT NULL,
`locationID` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `locationID_idx` (`locationID`),
CONSTRAINT `FK65jm2e3enqcu1nd37x48l57it` FOREIGN KEY (`locationID`) REFERENCES `location` (`locationID`),
CONSTRAINT `locationID` FOREIGN KEY (`locationID`) REFERENCES `location` (`locationID`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
Примечание. Каскадное ограничение на удаление - это то, которое я создал вручную при создании таблицы и других ограничений, созданных hibernate.
Я не уверен, почему ondeleteaction.cascade не работает. Любая помощь очень ценится.