У меня есть следующие два объекта домена в моем приложении:Hibernate каскадного типа удаление родителя
public class City {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="CITY_ID")
private Long id;
@Column(name="CITY_NAME",length=20,nullable=false,unique=false)
private String cityName;
@ManyToOne(cascade={CascadeType.ALL})
@JoinColumn(name="COUNTRY_ID",nullable=false)
private Country country;
}
public class Country {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="COUNTRY_ID")
private Long id;
@Column(name="COUNTRY_NAME",length=20,nullable=false,unique=false)
private String countryName;
@OneToMany(mappedBy="country",cascade=CascadeType.ALL)
private Set<City> cities=new HashSet<City>();
}
Теперь я столкнулся с проблемой, что всякий раз, когда я удалить какие-либо из дочерних записей (города) Родитель страна также удаляется.
Так например, если у меня есть страна США, у которой есть два города (Нью-Йорк) и (Калифорния), теперь, если я решил удалить (Нью-Йорк), я обнаружил, что (Калифорния) и (США) также удалены! Это неправильно ... поэтому после некоторых исследований я обнаружил, что проблема связана с каскадом, который я использую, но не понял, что именно я делаю неправильно.
Так может кто-нибудь угодить совету, что именно я делаю неправильно здесь? и как, когда я удаляю город, я получаю его только без родительской страны?
Спасибо за ваше время
Большое спасибо за подробный ответ .... вы сказали: «Также убедитесь, что вы не указали каскадное удаление внешнего ключа в базе данных», можете ли вы прокомментировать эту часть? Классы FK в City и Country - это поле id, и я не упоминал о каком-либо каскаде, или вы ссылаетесь на другое место, чтобы определить каскадное FK - удалить? – MChan
Когда вы создаете свою схему в базе данных, внешние ключи имеют каскадную настройку, которая может привести к удалению. –