Problema com relacionamento entre classes

olá pessoal, td bem??
Estou com um problema no mínimo estranho pra mim… mas vamos lá:

até semana passada, eu fazia o relacionamento nas classes dessa forma:

[code]@Entity
@Table(name = “estados”)
public class Estado implements Serializable {

private static final long serialVersionUID = -5582648910303813488L;

@Id
@GeneratedValue
private Long id;
private String sigla;
private String nome;
private cidade_id_cidade;
private cliente_id_cliente;
private empresa_id_empresa;[/code]

aí, segundo recomendações e explicações dos colegas eu corrigi e estou usando assim:

[code]@Entity
@Table(name = “estados”)
public class Estado implements Serializable {

private static final long serialVersionUID = -5582648910303813488L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ESTADO_ID")
private Long id;

@Column(name = "sigla")
private String sigla;

@Column(name = "nome")
private String nome;

@OneToMany(mappedBy = "estado", fetch = FetchType.LAZY)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private List<Cidade> cidades = new ArrayList<Cidade>();

@OneToMany(mappedBy = "estado", fetch = FetchType.LAZY)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private List<Cliente> clientes = new ArrayList<Cliente>();

@OneToMany(mappedBy = "estado", fetch = FetchType.LAZY)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private List<Empresa> empresas = new ArrayList<Empresa>();[/code]

O problema é que agora, se eu mando excluir um registro, ele faz um efeito dominó e sai apagando tudo que se relaciona com ele.

Antes isso não acontecia, então me leva a crer que o problema seja meu relacionamento… mas por vi das dúvidas, vou postar o código da exclusão no bean e na pagina.

[code] public String excluir(ActionEvent event) {
System.out.println("Excluindo: " + cliente.getId());
UIComponent link = event.getComponent();
UIParameter param = (UIParameter) link.findComponent(“excluir”);
Long id = (Long) param.getValue();

	Session session = HibernateUtil.currentSession();
	Dao<Cliente> clienteDao = new Dao<Cliente>(session, Cliente.class);
	this.cliente = clienteDao.load(id);
	clienteDao.delete(this.cliente);
	this.cliente = new Cliente();
	return "excluido";

}[/code]

<h:column> <f:facet name="header"> <h:outputText value="Excluir"/> </f:facet> <h:commandButton value="Excluir" actionListener="#{clienteBean.excluir}" /> <f:param id="excluir" name="id" value="#{f.id}"/> </h:column>

Se alguem souber o q pode ser, agradeço. Se precisar de mais detalhes é só pedir.

Flws

Olá Kleber-rr, já tentou retirar a anotação cascade do do seu mapeamento?

Faça um teste sem esta linha nos seus mapeamentos de relacionento:

@Cascade(org.hibernate.annotations.CascadeType.ALL)

[]'s

[quote=thiagocg]Olá Kleber-rr, já tentou retirar a anotação cascade do do seu mapeamento?

Faça um teste sem esta linha nos seus mapeamentos de relacionento:

@Cascade(org.hibernate.annotations.CascadeType.ALL)

[]'s[/quote]

O que essa linha significa??

Tiagão, valeu man!! Resolveu mesmo.

Opções de cascata são declaradas para que possam aplicar determinadas regras sobre os objetos associados a sua classe anotada, por exemplo o seu mapeamento de cidade:

@OneToMany(mappedBy = "estado", fetch = FetchType.LAZY) @Cascade(org.hibernate.annotations.CascadeType.ALL) private List<Cidade> cidades = new ArrayList<Cidade>();
Como vc está aplicando o modelo de cascata CascadeType.ALL o hibernate aplica sobre os objetos associados a estado todos os tipos de cascata definidos na documentação e entre eles o CascadeType.delete-orphan, que habilita a deleção de objetos associados quando eles são removidos da associação, no caso excluindo um estado a cidade que estava relacionada aquele estado tb é removida.

Espero ter ajudado!

[]'s

Aqui um link para a documentação do hibernate caso vc queira conhecer um pouquinho mais sobre cascade:

http://docs.jboss.org/hibernate/stable/core/reference/en/html/

De uma olhada nos itens:
21.3. Cascading life cycle
21.4. Cascades and unsaved-value

[]'s

[quote=thiagocg]Aqui um link para a documentação do hibernate caso vc queira conhecer um pouquinho mais sobre cascade:

http://docs.jboss.org/hibernate/stable/core/reference/en/html/

De uma olhada nos itens:
21.3. Cascading life cycle
21.4. Cascades and unsaved-value

[]'s[/quote]
ô tiagão, valeu man!! to precisando mesmo.

ótima semana.