Ao tentar remover a foto na tabela Foto sou impedido, já que a mesma ainda é referênciada na tabela Imovel, conforme a imagem:
Estou tentando resolver a questão com o seguinte código:
publicvoidremove(LongidImovel,LongidFoto){Fotofoto=fotoDAO.carrega(idFoto);Imovelimovel=imovelDAO.carrega(idImovel);if(idFoto==imovel.getAvatar().getIdFoto()){// criei esta condição pra deletar o avatarimovel.setAvatar(null);//aqui seto a referência em null para poder excluir o registro da foto mais abaixoimovelDAO.atualiza(imovel);// atualizo o imovel com avatar == null }imagens.remove(foto);fotoDAO.remove(foto);}
Mas continuo impedido mesmo setando em “null” a coluna avatar, alguém sabe como posso resolver isso? Ou talvez com alguma anotação ou parâmetro diretamente na classe?
Abraço!
Ao tentar remover a foto na tabela Foto sou impedido, já que a mesma ainda é referênciada na tabela Imovel, conforme a imagem:
Estou tentando resolver a questão com o seguinte código:
publicvoidremove(LongidImovel,LongidFoto){Fotofoto=fotoDAO.carrega(idFoto);Imovelimovel=imovelDAO.carrega(idImovel);if(idFoto==imovel.getAvatar().getIdFoto()){// criei esta condição pra deletar o avatarimovel.setAvatar(null);//aqui seto a referência em null para poder excluir o registro da foto mais abaixoimovelDAO.atualiza(imovel);// atualizo o imovel com avatar == null }imagens.remove(foto);fotoDAO.remove(foto);}
Mas continuo impedido mesmo setando em “null” a coluna avatar, alguém sabe como posso resolver isso? Ou talvez com alguma anotação ou parâmetro diretamente na classe?
Abraço!
Rapaz eu costumo resolver esse tipo de problema adicionando uma coluna ao dado chamada ativo do tipo boolean, aí em vez de excluir esses campos com referência eu opto por marcar ele como ativo = false :idea:
L
lelodois1 like
Bom dia…
A solução do Carlos é viável!
Mas caso queira excluir efetivamente seu registro, opte por exclusão em cascata.
E faça a chamada somente para o objeto Imovel, e o hibernate irá excluir o depentende.
ImovelDAO.remove(imovel);
Abrs
G
Guevara
Opa! Obrigado pela dicas pessoal, mas o problema não é remover imovel e em cascata a foto.
O lance é que tenho uma galeria de fotos, consigo remover todas menos a que está referenciada na tabela imovel, ou seja, preciso deletar a foto avatar sem deletar o imovel em cascata, eu tinha tentado uma anotação aqui e aconteceu isso, deletei a foto avatar e o imóvel foi pro espaço. Preciso remover a foto sem remover o imovel, setando a coluna avatar em null.
A dica de adicionar campo boolean eu tinha feito antes, mas fica inviável, pois preciso da id da foto que é avatar para poder carreá-la junto com o imóvel.
Tõ pesquisando aqui o que posso fazer a respeito, se tiverem outra idéia é só falar.
Valeu!!!
L
lelodois
Guevara:
Opa! Obrigado pela dicas pessoal, mas o problema não é remover imovel e em cascata a foto.
O lance é que tenho uma galeria de fotos, consigo remover todas menos a que está referenciada na tabela imovel, ou seja, preciso deletar a foto avatar sem deletar o imovel em cascata, eu tinha tentado uma anotação aqui e aconteceu isso, deletei a foto avatar e o imóvel foi pro espaço. Preciso remover a foto sem remover o imovel, setando a coluna avatar em null.
A dica de adicionar campo boolean eu tinha feito antes, mas fica inviável, pois preciso da id da foto que é avatar para poder carreá-la junto com o imóvel.
Tõ pesquisando aqui o que posso fazer a respeito, se tiverem outra idéia é só falar.
Valeu!!!
Mostre como está o relacionamento de imagens para foto…
Talvez seja necessário vc atualizar o objeto imagens tb…
O problema está sendo em remover a foto que é avatar, pq na tabela Imovel existe uma coluna imovel.avatar.idFoto,ou seja, é remover o registro de foto e atualizar essa coluna pra null, mas sem deletar o imóvel.
Abraço!
L
lelodois
Você tentou dar um merge na sua entidade Imovel e Imagens?
Remova e de um anule o objeto, depois da um merge em imovel…
G
Guevara
Já tentei dar um “merge”, mas não adiantou. Ainda tô pesquisando o pq disso, já que aparentemente dar um set null em avatar deveria funcionar. =/
L
lelodois
Este trecho de código está errado, vc deveria remover da lista antes de fazer o merge…
Fotofoto=fotoDAO.carrega(idFoto);Imovelimovel=imovelDAO.carrega(idImovel);if(idFoto==imovel.getAvatar().getIdFoto()){// criei esta condição pra deletar o avatar imovel.setAvatar(null);//aqui seto a referência em null para poder excluir o registro da foto mais abaixo imovelDAO.atualiza(imovel);// atualizo o imovel com avatar == null }imagens.remove(foto);fotoDAO.remove(foto)
Ficaria assim
if(idFoto==imovel.getAvatar().getIdFoto()){// criei esta condição pra deletar o avatar imovel.setAvatar(null);//aqui seto a referência em null para poder excluir o registro da foto mais abaixo imovel.getImagens().remove(foto);imovelDAO.atualiza(imovel);// atualizo o imovel com avatar == null }fotoDAO.remove(foto)
Caso tenha tentado assim, poste a exception para vermos o que ocorre…
G
Guevara
A minha classe Imagens é para armazenar e deletar as imagens da pasta, a classe Foto é onde salvo os dados da foto no banco, nome, id, url. O pior é que a condição if() é verdadeira:
url: http://localhost:8080/imobiliaria/foto/remove/83/264
Onde 83 é a id do imovel e 264 é a id da foto.
publicvoidremove(LongidImovel,LongidFoto){Fotofoto=fotoDAO.carrega(idFoto);Imovelimovel=imovelDAO.carrega(idImovel);if(idFoto==imovel.getAvatar().getIdFoto()){// condição verdadeira 264 é igual a 264Fotoavatar=null;// inicializo avatar com nullimovel.setAvatar(avatar);// seto avatar com nullimovelDAO.atualiza(imovel);// atualizo o imovel com o avatar ja zerado, teoricamente já posso deletar o registro da foto na tabela Foto}imagens.remove(foto);// removo a foto da pastafotoDAO.remove(foto);// aqui dá o pau, o avatar não foi zerado lá no if()
Não entendi o pq não está zerando a coluna avatar na tabela Imovel, já dei um clean no tomcat e tb não surtiu efeito.
G
Guevara
Descobri pessoal, só podia ser isto mesmo:
if(idFoto.equals(imovel.getAvatar().getIdFoto()))
É pra usar equals() e não “==”.
Valeu pela força!
L
lelodois
Guevara:
Descobri pessoal, só podia ser isto mesmo:
if(idFoto.equals(imovel.getAvatar().getIdFoto()))
É pra usar equals() e não “==”.
Valeu pela força!
kkkkkkkkkk, e eu pensando que era mapeamento.
já iria sugerir para vc usar um update em hql e depois dar uma pesquisada neste erro rsrs
abraço
coloca como [Resolvido]
G
Guevara
hehehe, quebrando a cabeça a gente aprende, tinha esquecido do equals(), de repente deu aquele estalo no cérebro, foi tiro e queda.
Já alterei o tópico como [Resolvido].
Abraço!!
C
cssiner
Poxa, eu gostaria de fazer exatamente o OPOSTO do tópico,
possuo uma tablea UNCIONARIO que possui uma chave estrangeira para USUARIO, gostaria de deletar o USUARIO ao mandar excluir o ogbeto do tipo USUARIO que mando ao
FuncionarioDAO.excluir();
no meu caso o funcionario é excluido, mas o usuario permanece, como proceder pessoal ?
L
lelodois
cssiner:
Poxa, eu gostaria de fazer exatamente o OPOSTO do tópico,
possuo uma tablea UNCIONARIO que possui uma chave estrangeira para USUARIO, gostaria de deletar o USUARIO ao mandar excluir o ogbeto do tipo USUARIO que mando ao
FuncionarioDAO.excluir();
no meu caso o funcionario é excluido, mas o usuario permanece, como proceder pessoal ?