Problema com JSF + hibernate

2 respostas
V

Bom dia pessoal,

Estou pedindo uma ajuda urgente para vocês quanto a exclusão de entidades usando chave composta.

Tenho essas duas entidades:

@Entity

@Table(name = requisitos_erp)

@NamedQueries({@NamedQuery(name = RequisitosErp.findAll, query = SELECT r FROM RequisitosErp r),

@NamedQuery(name = RequisitosErp.findByIdBts, query = SELECT r FROM RequisitosErp r WHERE r.requisitosErpPK.idBts = :idBts),

@NamedQuery(name = RequisitosErp.findByIdCap, query = SELECT r FROM RequisitosErp r WHERE r.requisitosErpPK.idCap = :idCap),

@NamedQuery(name = RequisitosErp.findByIdSubcap, query = SELECT r FROM RequisitosErp r WHERE r.requisitosErpPK.idSubcap = :idSubcap),

@NamedQuery(name = obterRequisitoPelaChave,query = SELECT r FROM RequisitosErp r WHERE r.requisitosErpPK.idBts = :idBts and r.requisitosErpPK.idCap = :idCap and r.requisitosErpPK.idSubcap = :idSubcap and r.requisitosErpPK.doc = :doc),

@NamedQuery(name = RequisitosErp.RequisitoERP,query = SELECT r FROM RequisitosErp r WHERE r.requisitosErpPK.idBts = :idBts and r.requisitosErpPK.idCap = :idCap and r.requisitosErpPK.idSubcap = :idSubcap),

@NamedQuery(name = RequisitosErp.delete,query = DELETE FROM RequisitosErp r WHERE r.requisitosErpPK.idBts = :idBts and r.requisitosErpPK.doc = :doc),

@NamedQuery(name = RequisitosErp.findByDoc, query = SELECT r FROM RequisitosErp r WHERE r.requisitosErpPK.doc = :doc)})

public class RequisitosErp implements Serializable {

private static final long serialVersionUID = 1L;

@EmbeddedId

protected RequisitosErpPK requisitosErpPK;

<a class="mention" href="/u/basic">@Basic</a>(optional = false)

<a class="mention" href="/u/lob">@Lob</a>

@Column(name = “requisito”)

private String requisito;

public RequisitosErp() {
}

public RequisitosErp(RequisitosErpPK requisitosErpPK) {

this.requisitosErpPK = requisitosErpPK;

}
public RequisitosErp(RequisitosErpPK requisitosErpPK, String requisito) {
    this.requisitosErpPK = requisitosErpPK;
    this.requisito = requisito;
}

public RequisitosErp(long idBts, int idCap, int idSubcap, String doc) {
    this.requisitosErpPK = new RequisitosErpPK(idBts, idCap, idSubcap, doc);
}

public RequisitosErpPK getRequisitosErpPK() {
    return requisitosErpPK;
}

public void setRequisitosErpPK(RequisitosErpPK requisitosErpPK) {
    this.requisitosErpPK = requisitosErpPK;
}

public String getRequisito() {
    return requisito;
}

public void setRequisito(String requisito) {
    this.requisito = requisito;
}

Requisitos_ErpPk

@Embeddable

public class RequisitosErpPK implements Serializable {

<a class="mention" href="/u/basic">@Basic</a>(optional = false)

@Column(name = “id_bts”)

private long idBts;

<a class="mention" href="/u/basic">@Basic</a>(optional = false)

@Column(name = “id_cap”)

private int idCap;

<a class="mention" href="/u/basic">@Basic</a>(optional = false)

@Column(name = “id_subcap”)

private int idSubcap;

<a class="mention" href="/u/basic">@Basic</a>(optional = false)

@Column(name = “doc”)

private String doc;
public RequisitosErpPK() {
}

public RequisitosErpPK(long idBts, int idCap, int idSubcap, String doc) {
    this.idBts = idBts;
    this.idCap = idCap;
    this.idSubcap = idSubcap;
    this.doc = doc;
}

public long getIdBts() {
    return idBts;
}

public void setIdBts(long idBts) {
    this.idBts = idBts;
}

public int getIdCap() {
    return idCap;
}

public void setIdCap(int idCap) {
    this.idCap = idCap;
}

public int getIdSubcap() {
    return idSubcap;
}

public void setIdSubcap(int idSubcap) {
    this.idSubcap = idSubcap;
}

public String getDoc() {
    return doc;
}

public void setDoc(String doc) {
    this.doc = doc;
}

Estou fazendo uma função para exclusão de registro, só que não está funcionando.

To passando passo a passo como ta sendo feito:

long id_bts_erp = (Long) stIdBts.getValue();
    int  id_cap_erp = (Integer) stidCap.getValue();
    int  sub_cap_erp = (Integer) stIdSubcap.getValue();
    String docERP;
    String Requisito;

     docERP = (String) stDocERP.getText();
     Requisito = stRequisito.getText().toString();

    //Obtendo o requisito a ser excluído
    RequisitosERPDAO obterRequisitoDAO = new RequisitosERPDAO();
    RequisitosErp reqERP = obterRequisitoDAO.obterRequisitoExclusao(id_bts_erp,id_cap_erp,sub_cap_erp,docERP,Requisito);

    RequisitosERPDAO ExcluirRequisitoDAO = new RequisitosERPDAO();
    try {
       ExcluirRequisitoDAO.Excluir(reqERP);
        info("Requisito excluído com sucesso!");
    } catch (Exception e) {
        info("Erro - Requisito não pôde ser excluído!");
    }
     return "CapituloEdicao";
}
public void Excluir(RequisitosErp requisitoerp) {

EntityManager em = Conecta.getEntityManager();

try {
RequisitosErp req = new RequisitosErp();

        EntityTransaction utx = em.getTransaction();
        RequisitosErp requisitoERP = em.find(RequisitosErp.class,requisitoerp);

        utx.begin();
        em.remove(requisitoERP);
        utx.commit();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        em.close();
    }
}

E está dando o seguinte erro:

Caused by: org.hibernate.TypeMismatchException: Provided id of the wrong type. Expected: class beans.RequisitosErpPK, got class beans.RequisitosErp

Alguém poderia me ajudar a resolver essa exclusão?

Obrigada.

2 Respostas

H

O erro esta retornando na hora da execução do find(), correto ?

No find voce deve passar alem da classe, o id:

RequisitosErp requisitoERP = em.find(RequisitosErp.class,requisitoerp.getRequisitosErpPK());

Abraços

Hildebrando

V

Hildebrando

Muitíssimo obrigada.

Deu certo.

Aproveitando gostaria de perguntar também se você conhece algum tutorial de JasperReports para Netbeans 6.5

Mais uma vez, obrigada.

Criado 10 de junho de 2009
Ultima resposta 10 de jun. de 2009
Respostas 2
Participantes 2