@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="ID_SIST_FK")
public List<DivisaoSistema> getDivisoesSistema() {
return this.divisoesSistema;
}
DivisoesSistema tem um long que é o ID_SIST_FK
@Column(name="DIVIS")
public String getDivisao() {
return divisao;
}
No banco são duas tabelas
Sistema e DivisaoSistema,
DivisaoSistema tem uma FK para Sistema que é o ID_SIST_FK e Sistema não tem nenhum relacionamento com DivisaoSistema.
Meu problema é seguinte,
quando tento excluir alguma DivisaoSistema da lista de divisoesSistema na classe Sistema, ao invés dele fazer um DELETE no registro no banco,
ele faz update na tabela DivisaoSistema setando o ID_SIST_FK como null,
como eu faço para ele excluir, tipo delete-orphan?
Encontrei o mesmo problema, alguém encontrou uma solução ? Eu alterei a coluna da tabela para null pois depois que faz o update o hibernate faz o delete das entidades órfas. O problema é que o banco de dados fica sem integridade.
@Entity
public class Sistema {
//[...]
@OneToMany(cascade=CascadeType.ALL, mappedBy="divisao")
@JoinColumn(name="ID_SIST_FK")
private List<DivisaoSistema> divisoesSistema;
//[...]
}
Na classe DivisaoSistema:
@Entity
public class DivisaoSistema {
//[...]
@ManyToOne(optional=false)
@Column(name="DIVIS")
private Sistema divisao;
//[...]
}
Não acredito que precise colocar a anotação no atributo, tenta primeiro colocando no método, mesmo. Caso não funcione tente no atributo, mas acho pouco provável que faça diferença neste caso.
public void setIdDisciplinaCurriculo(java.lang.Integer idDisciplinaCurriculo) {
this.idDisciplinaCurriculo = idDisciplinaCurriculo;
}[/code]
Só que dessa forma é necessário que a coluna id_disciplina_curriculo da classe IntegridadePrEqRp aceite null. Pois o hibernate faz o update IntegridadePrEqRp id_disciplina_curriculo = null e depois faz o delete.
Tem certeza? É que eu tenho um sistema com as classes assim:
@Entity
public class Pedido {
//[...]
@OneToMany(cascade=CascadeType.ALL, mappedBy="pedido")
private List<PedidoMaterial> materiaisPedidos;
//[...]
}
E a classe PedidoMaterial que guarda os atributos da associação entre Pedido e Material.
@Entity
public class PedidoMaterial {
//[...]
@ManyToOne(optional=false)
private Pedido pedido;
//[...]
}
E se eu faço a consulta hql:
select pm
from PedidoMaterial pm
where pm.id = 13
O Hibernate gera a consulta:
select
pedidomate0_.id as id8_,
pedidomate0_.pedido_id as pedido6_8_,
pedidomate0_.material_id as material5_8_,
pedidomate0_.quantidade as quantidade8_,
pedidomate0_.precoCompra as precoCom3_8_,
pedidomate0_.precoVenda as precoVenda8_
from
shaper.PedidoMaterial pedidomate0_
where
pedidomate0_.id=13
Isto é, não faz consulta sobe o Pedido. Tem certeza de que está acontecendo isso? :?
Qual a versão do Hibernate você está usando? Não teria um fetch=FetchType.EAGER no seu @ManyToOne, perdido, por aí, não?