Hibernate - Como remover deleção automática em relacionamento 1-n?
5 respostas
geidivan
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.
Posta aqui o relacionamento que vc está utilizando…
[]'s
georgesq
remove o cascade all ou cascade delete
geidivan
Não coloquei nenhum cascade. Tá aí o código.
packageentity.pojo;importjava.io.Serializable;importjavax.persistence.Entity;importjavax.persistence.Table;importjavax.persistence.Id;importjavax.persistence.Column;importjavax.persistence.FetchType;importjavax.persistence.GeneratedValue;importjavax.persistence.GenerationType;importjavax.persistence.JoinColumn;importjavax.persistence.ManyToOne;importorg.hibernate.annotations.Fetch;importorg.hibernate.annotations.FetchMode;@Entity@Table(name="usuario",schema="siapso")publicclassUsuarioimplementsSerializable{@Id@GeneratedValue(strategy=GenerationType.AUTO)@Column(name="codigo_usuario",length=4)privateintcodigo_usuario;@Column(name="nome",nullable=false,length=250)privateStringnome;@Column(name="login",nullable=false,length=30)privateStringlogin;@Column(name="telefone",length=10)privateStringtelefone;@Column(name="email",length=250)privateStringemail;@Column(name="senha",nullable=false,length=8)privateStringsenha;@ManyToOne(fetch=FetchType.EAGER)@JoinColumn(name="codigo_perfil",insertable=true,updatable=true)@Fetch(FetchMode.JOIN)privatePerfilperfil;publicUsuario(){}// getters e setters // ...}//-------------------------------------------------------------------packageentity.pojo;importjava.io.Serializable;importjava.util.Set;importjavax.persistence.Entity;importjavax.persistence.Table;importjavax.persistence.Id;importjavax.persistence.Column;importjavax.persistence.FetchType;importjavax.persistence.GeneratedValue;importjavax.persistence.GenerationType;importjavax.persistence.JoinColumn;importjavax.persistence.OneToMany;@Entity@Table(name="perfil",schema="siapso")publicclassPerfilimplementsSerializable{@Id@GeneratedValue(strategy=GenerationType.AUTO)@Column(name="codigo_perfil",length=2,nullable=false)intcodigo_perfil;@Column(name="nome",nullable=false,length=250)Stringnome;@Column(name="descricao",length=250)Stringdescricao;// Relacionamentos@OneToMany(mappedBy="perfil",fetch=FetchType.LAZY)@JoinColumn(name="codigo_perfil")privateSet<Usuario>usuarios;publicPerfil(){}// getters e setters // ...}
Quando faço um session.delete(1, Perfil.class) , todos os usuários relacionados a esse perfil é deletado.
Rodrigo_Pereira_Vale
Isso mesmo, falou e disse.
Rodrigo_Pereira_Vale
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á.