удалить связанные @OneToOne автоматически в JPA - PullRequest
2 голосов
/ 10 февраля 2011

Я использую следующее в JPA:

@Entity
class ParentClass {
  @Id
  @GeneratedValue
  private long id;
  ...
  @OneToOne(cascade = { cascade = { CascadeType.ALL }, 
                        mappedBy = "parentClass")
  ChildClass child;
  ..
}

@Entity
class ChildClass {

  @OneToOne
  ParentClass parentClass;

}

Если я выполняю запрос типа createQuery («УДАЛИТЬ ИЗ ParentClass pc»), мой дочерний класс не удаляется автоматически.

Можно ли это сделать с помощью JPA-2.0? (Я работаю с отношениями @OneToMany).

Ответы [ 2 ]

4 голосов
/ 10 февраля 2011

Bulk DML-запросы, такие как DELETE FROM ParentClass pc, игнорируют параметры каскадирования и orphanRemoval, поэтому, если вам действительно нужно сделать это в массовом запросе, вы не можете настроить JPA для автоматического удаления ChildClass es.

Однако вы можете настроить свою базу данных для этого, добавив ограничение REFERENCES ... ON DELETE CASCADE к ключу foregin ChildClass в схеме базы данных.

3 голосов
/ 10 февраля 2011

В JPA2 вы можете установить orphanRemoval = true для аннотации @OneToOne. Однако я бы сказал, что CascadeType.ALL должен справиться с этим. Что делать, если вы вызываете em.remove (parentClass) вместо вызова запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...