У меня есть один-ко-многим:Hibernate, JPA не могу удалить один-ко-многим
@Entity
@Table(name = "Users")
public class User {
@Id
@Column(name = "user_id", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "login", nullable = false)
private String login;
@Column(name = "password", nullable = false)
private String password;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "role_id", nullable = false)
private Role role;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user", cascade = javax.persistence.CascadeType.ALL)
private Set<Contacts> contacts = new HashSet<Contacts>();
И я пытаюсь удалить User
объект со всеми Контакты; Я пытался использовать:
cascade = javax.persistence.CascadeType.ALL
cascade = javax.persistence.CascadeType.REMOVE
@Cascade(CascadeType.DELETE)
изorg.hibernate.annotations
@Cascade(CascadeType.DELETE_ORPHAN)
изorg.hibernate.annotations
но nothi помогли. Я всегда получаю исключение:
org.hibernate.util.JDBCExceptionReporter - Невозможно удалить или обновить родительскую строку:. Ограничение внешнего ключа не удается (
contactmanager
contact
, скованностьcontact_ibfk_1
FOREIGN KEY (user_id
) Лит
UPD Код, который удаляет пользователя выглядит следующим образом:
@Transactional
public void removeUser(User user) {
sessionFactory.getCurrentSession().delete(user);
}
Буду признателен за любую помощь! Благодарю.
Вы пытались установить 'orphanRemoval = true' в отношении' OneToMany'? Кроме того, как вы пытаетесь удалить записи? – DannyMo
Да, я. Но по какой-то причине Maven сказал мне: «Атрибут orphanRemoval не определен для типа аннотации OneToMany». –
'orphanRemoval' был представлен в JPA 2.0, поэтому, если вы используете более старую версию, которая объясняет, почему она не определена. 'orphanRemoval' всегда работает для меня на аналогичных отношениях (с использованием eclipselink). Это похоже на то, что 'CascadeType.DELETE_ORPHAN' является Hibernate-специфическим (и устаревшим) эквивалентом' orphanRemoval', поэтому я не уверен, почему он не работает для вас. Последняя мысль состоит в том, чтобы убедиться, что у вас есть 'equals' и' hashCode' [правильно определены] (http://docs.jboss.org/hibernate/core/4.0/manual/en-US/html/persistent-classes.html # настойчивые-классы-equalshashcode). – DannyMo