11
respostas

Jpa hibernate Não remove

Consigo remover outras entidades com mesmo codigo porém apenas essa classe que nao. executa nao gera erro nem um nem msg apenas nao remove.

    public void removerSite(Site site) {
    EntityManager em = new JPAUtilPainelWeb().getEntityManager();
    site = this.buscarSite(site.getStId());
    em.getTransaction().begin();
    em.remove(em.merge(site));
    em.flush();
    em.getTransaction().commit();
    em.close();
}
11 respostas
@Entity
@Table(name = "site", schema="painelweb")
public class Site implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "st_id")
    private Integer stId;
    //Cada site tem apenas um tipo
    //Lista deve carregar na hora
    //Join mostra qual são os campos relacionados
    @ManyToOne
    @JoinColumn(name = "st_tipo" , referencedColumnName = "sp_id")
    private SiteTipo siteTipo;
    //Cada site tem apenas um cartótio
    @OneToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "st_cartorio" , referencedColumnName = "ca_id")
    private Cartorio cartorio;
    //Cada site pode ter uma lista de info Site
    @OneToMany(mappedBy = "ifSites" , cascade = CascadeType.ALL , fetch = FetchType.LAZY)
    private List<SiteInfo> stInfoSite;
    @OneToMany(mappedBy = "shSite" , cascade = CascadeType.ALL , fetch = FetchType.LAZY)
    //@OneToMany(mappedBy = "shSite" , cascade = CascadeType.REFRESH , fetch = FetchType.LAZY)
    private List<SiteHistorico> stSiteHistorico;
    //Evitar usar essa lista.
    @OneToMany(mappedBy = "slSite" ,cascade = CascadeType.ALL , fetch = FetchType.LAZY)
    private List<SiteLog> stSiteLogs;
    @Column(name = "st_link")
    private String stLink;
    @Column(name = "st_ativo")
    private boolean stAtivo;
public void removerSite(Site site) {
    EntityManager em = new JPAUtilPainelWeb().getEntityManager();
    site = this.buscarSite(site.getStId());
    em.getTransaction().begin();
    em.remove(em.merge(site));
    em.flush();
    em.getTransaction().commit();
    em.close();
}
package br.com.escriba.painelmonitoramentowebsystems.dao;

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.FlushModeType;
import javax.persistence.Query;

import br.com.escriba.websystems.util.model.Site;

public class DaoSite {

    Site site = new Site();
//
//    public void removerSite(Site site) {
//        EntityManager em = new JPAUtilPainelWeb().getEntityManager();
//        site = this.buscarSite(site.getStId());
//        em.getTransaction().begin();
//        // em.remove(em.merge(site));
//        // String sql = "DELETE FROM site WHERE st_id = "+site.getStId();
//        // Query query = em.createNativeQuery(sql);
//        // query.executeUpdate();
//        // em.remove(site);
//        em.merge(site);
//        em.remove(em.getReference(Site.class, site.getStId()));
//        System.out.println("Site :" + site.getStId());
//        System.out.println("Link :" + site.getStLink());
//        em.flush();
//        em.getTransaction().commit();
//
//        em.close();
//    }

    public void removerSite(Site site) {
    EntityManager em = new JPAUtilPainelWeb().getEntityManager();
    site = this.buscarSite(site.getStId());
    em.getTransaction().begin();
    em.remove(em.merge(site));
    em.flush();
    em.getTransaction().commit();
    em.close();
}
    public Site buscarSite(Integer id) {
        EntityManager em = new JPAUtilPainelWeb().getEntityManager();
        Site site;
        em.getTransaction().begin();
        site = em.find(Site.class, id);
        em.getTransaction().commit();
        em.close();
        return site;
    }

}

Fala ai Bruno, de boa ?

Sem a exception é meio dificil de saber o que tá rolando.

Contudo tenho um chute bem interessante.

O hibernate tenta garantir que seu banco esteja sempre o mais correto possível.

Se o site que você quer adicionar estiver dentro de outras entidades, ele vai bloquear o delete disso, para que seu banco não fique inconsistente.

Oi boa tarde, Obrigado por responder. Assim ele esta dentro de outra entidade. Essa entidade pode ter varios sites. Quando deleto essa entidade que e pai dele funciona tudo normal o esperado porem quando quero deletar apenas um site. ele roda codigo normal mais nao efetua o delete

@Entity
@Table(name = "cartorio", schema="painelweb")
public class Cartorio {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ca_id")
    private Integer caId;
    @Column(name = "ca_cod")
    private String caCod;
    @Column(name = "ca_descricao")
    private String caDescricao;
    @Column(name = "ca_cidade")
    private String caCidade;
    @Column(name = "ca_estado")
    private String caEstado;
    @Column(name = "ca_ativo")
    boolean caAtivo;
    @Column(name = "ca_dataInclusao")
    @Temporal(TemporalType.TIMESTAMP)
    private Date caDataInclusao;
    @OneToMany(mappedBy = "cartorio" ,cascade = CascadeType.ALL , fetch = FetchType.EAGER)
    private List<Site> caSites;
}

Essa e entidade pai dele.

Para adicionar ele vai normal posso inserir quantos sites eu quiser. Apenas para remover que não funciona

Provavelmente o site que voce quer deletar está sendo usado em um cartorio, e por esse motivo você não consegue remove-lo.

Sim o site pertence sempre a um cartório. Dentro de site tenho uma chave estrangeira que representa o id do cartório. Para fazer consegui deletar o site o que seria nescessário fazer

Em tese, você precisa desvincular o site do cartorio, quando fizer isso, vai conseguir deletar