@OneToOne и @JoinColumn, автоматический, удаляют пустой объект, выполнимый?

У меня есть два Объекта со следующими аннотациями JPA:

@Entity
@Table(name = "Owner")
public class Owner implements Serializable
{
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @Column(name = "id")
  private long id;

  @OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL)
  @JoinColumn(name="Data_id")
  private Data Data;  
}

@Entity
@Table(name = "Data")
public class Data implements Serializable
{
  @Id
  private long id;
}

У владельца и Данных есть непосредственное отображение, сторона владения является Владельцем. Проблема происходит, когда я выполняюсь: owner.setData (пустой указатель); ownerDao.update (владелец); Data_id таблицы "Owner" становится пустым, это корректно.

Но строка "Данных" не удалена автоматически. Я должен записать другой DataDao и другой уровень служб для обертывания этих двух действий (ownerDao.update (владелец); dataDao.delete (данные);)

Действительно ли возможно сделать строку данных автоматически удаленной, когда Владелец владения установил его в NULL?

10
задан smallufo 14 June 2010 в 05:48
поделиться

1 ответ

В зависимости от версии гибернации используйте:

используйте cascadeType: DELETE_ORPHAN или orphanRemoval = true в аннотации @OneToOne

документация: http: //docs.jboss .org / hibernate / core / 3.3 / reference / en / html / objectstate.html # objectstate-transitive

Я никогда не пробовал его на OneToOne, но, судя по документации, он должен работать.

@OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL)
@JoinColumn(name="Data_id")
@org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
private Data Data;

или

@OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL, orphanRemoval=true)
@JoinColumn(name="Data_id")
private Data Data;

РЕДАКТИРОВАТЬ: Я нашел это сообщение SO: Обходные пути для Hibernate отсутствия поддержки delete-orphan для отношений «один-к-одному» и «многие-к-одному»?

Так что, возможно, это не работает. Однако два ответа описывают два разных обходных пути.

14
ответ дан 3 December 2019 в 23:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: