Tenho um relacionamento 1 - n, no qual um usuário possui um perfil e um perfil possui um set de usuários. Quando deleto um perfil, o hibernate deleta todos os usuários relacionados a ele. Gostaria que isso não fosse possível, emitindo uma mensagem de erro por exemplo. Tem como fazer isso? Não coloquei nenhum Cascade no mapeamento.
Obs: uso Hibernate Annotations com DB MySQL.
Opa geidivan tudo bom?
Posta aqui o relacionamento que vc está utilizando…
[]'s
remove o cascade all ou cascade delete
Não coloquei nenhum cascade. Tá aí o código.
package entity.pojo;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Id;
import javax.persistence.Column;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
@Entity @Table(name="usuario", schema="siapso")
public class Usuario implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="codigo_usuario", length=4)
private int codigo_usuario;
@Column(name="nome", nullable=false, length=250)
private String nome;
@Column(name="login", nullable=false, length=30)
private String login;
@Column(name="telefone", length=10)
private String telefone;
@Column(name="email", length=250)
private String email;
@Column(name="senha", nullable=false, length=8)
private String senha;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="codigo_perfil",insertable=true,updatable=true)
@Fetch(FetchMode.JOIN)
private Perfil perfil;
public Usuario() {}
// getters e setters
// ...
}
//-------------------------------------------------------------------
package entity.pojo;
import java.io.Serializable;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Id;
import javax.persistence.Column;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
@Entity @Table(name="perfil", schema="siapso")
public class Perfil implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="codigo_perfil", length=2, nullable=false)
int codigo_perfil;
@Column(name="nome", nullable=false, length=250)
String nome;
@Column(name="descricao", length=250)
String descricao;
// Relacionamentos
@OneToMany(mappedBy="perfil", fetch = FetchType.LAZY)
@JoinColumn(name="codigo_perfil")
private Set<Usuario> usuarios;
public Perfil() {}
// getters e setters
// ...
}
Quando faço um session.delete(1, Perfil.class) , todos os usuários relacionados a esse perfil é deletado.
Isso mesmo, falou e disse.
Deleta esse @Fetch(FetchMode.JOIN) da Classe perfil. Assim o relacionamento ficará padrão.
O que é responsável por operações em cascata como o georgeesq disse é o cascade porem removendo isso dai acho que funcionará.