Почему jpa2 / eclipselink не генерирует каскад удаления SQL? - PullRequest
1 голос
/ 15 сентября 2010

@ Открытый класс Entity MUser реализует Serializable, MemoEntity {

private static final long serialVersionUID = 1L;
@Id
private String email;

@OneToMany(cascade=CascadeType.ALL, orphanRemoval=true)
private Set<Meaning> mengs = new HashSet<Meaning>();

Разве это не значит, что я получаю ограничение с "каскадом удаления"?

Это то, чтогенерируется вместо:

  CREATE TABLE MUSER_MEANING (MUser_EMAIL VARCHAR(255) NOT NULL, mengs_OBJID INTEGER NOT NULL, PRIMARY KEY (MUser_EMAIL, mengs_OBJID))
CREATE TABLE MUSER_MEANING (MUser_EMAIL VARCHAR(255) NOT NULL, mengs_OBJID INTEGER NOT NULL, PRIMARY KEY (MUser_EMAIL, mengs_OBJID))
ALTER TABLE MEANING ADD CONSTRAINT MEANING_USR_EMAIL FOREIGN KEY (USR_EMAIL) REFERENCES MUSER (EMAIL)
ALTER TABLE MUSER_MEANING ADD CONSTRAINT MSRMEANINGMsrEMAIL FOREIGN KEY (MUser_EMAIL) REFERENCES MUSER (EMAIL)

Я пытаюсь сделать так, чтобы удаление MUser удаляло все значения, связанные с ним.

1 Ответ

2 голосов
/ 17 сентября 2010

Почему jpa2 / eclipselink не генерирует каскад удаления SQL?

Потому что это не так.Указание cascade=REMOVE означает, что операция remove будет каскадно добавляться к сущностям провайдером JPA , а не на уровне базы данных с использованием ограничения.

У некоторых провайдеров есть расширения для использованияограничение каскадного удаления на уровне базы данных вместо обычного механизма.Например, в Hibernate вы можете указать:

@OnDelete(action=OnDeleteAction.CASCADE) на соединенных подклассах: использовать SQL-каскадное удаление при удалении вместо обычного механизма Hibernate.

Но яне знаю, есть ли в EclipseLink что-то эквивалентное.

Ссылки

...