Pergunta

Eu tenho duas entidades, com as seguintes anotações 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;
}

Proprietário e dados têm mapeamento individual, o lado proprietário é o proprietário. O problema ocorre quando eu executo: proprietário.setData (nulo); Propriedadedao.Update (Proprietário) ; O data_id da tabela "proprietário" se torna nulo, isso está correto.

Mas a linha "dados" não é excluída automaticamente. Eu tenho que escrever outro datadao e outra camada de serviço para envolver as duas ações (donodao.update (proprietário); datadao.delete (dados););

É possível fazer uma linha de dados excluída automaticamente quando o proprietário do proprietário é definido como NULL?

Foi útil?

Solução

Dependendo da sua versão de hibernato, use:

Use o cascadeType: delete_orphan ou orphanRemoval = true na anotação @onetoone

Documentação: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/objectstate.html#objectstate-transitive

Eu nunca tentei no OnetoOne, mas do médico, deve funcionar.

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

ou

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

EDIT: Encontrei isso então post: Soluções alternativas para a falta de apoio a excluir-orfãs do Hibernate para relacionamentos individuais e muitos e muitos?

Então, o Perhap está funcionando. As duas respostas descrevem duas soluções alternativas diferentes, no entanto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top