2013-03-07 246 views
0

我有一個實體類持久性JPA

公共Candidatos(){ }

public Candidatos(Integer identificacion) { 
    this.identificacion = identificacion; 
} 

public Integer getIdentificacion() { 
    return identificacion; 
} 

public void setIdentificacion(Integer identificacion) { 
    this.identificacion = identificacion; 
} 

public String getNombre() { 
    return nombre; 
} 

public void setNombre(String nombre) { 
    this.nombre = nombre; 
} 

public String getApellido() { 
    return apellido; 
} 

public void setApellido(String apellido) { 
    this.apellido = apellido; 
} 

public String getCurso() { 
    return curso; 
} 

public void setCurso(String curso) { 
    this.curso = curso; 
} 

public Integer getVotos() { 
    return votos; 
} 

public void setVotos(Integer votos) { 
    this.votos = votos; 
} 

@Override 
public int hashCode() { 
    int hash = 0; 
    hash += (identificacion != null ? identificacion.hashCode() : 0); 
    return hash; 
} 

@Override 
public boolean equals(Object object) { 
    // TODO: Warning - this method won't work in the case the id fields are not set 
    if (!(object instanceof Candidatos)) { 
     return false; 
    } 
    Candidatos other = (Candidatos) object; 
    if ((this.identificacion == null && other.identificacion != null) || (this.identificacion != null && !this.identificacion.equals(other.identificacion))) { 
     return false; 
    } 
    return true; 
} 

@Override 
public String toString() { 
    return "entidades.Candidatos[ identificacion=" + identificacion + " ]"; 
} 

}

和我的JPA控制器

公共類CandidatosJpaController實現Serializable {

public CandidatosJpaController(EntityManagerFactory emf) { 
    this.emf = emf; 
} 
private EntityManagerFactory emf = null; 

public EntityManager getEntityManager() { 
    return emf.createEntityManager(); 
} 

public void create(Candidatos candidatos) throws PreexistingEntityException, Exception { 
    EntityManager em = null; 
    try { 
     em = getEntityManager(); 
     em.getTransaction().begin(); 
     em.persist(candidatos); 
     em.getTransaction().commit(); 
    } catch (Exception ex) { 
     if (findCandidatos(candidatos.getIdentificacion()) != null) { 
      throw new PreexistingEntityException("Candidatos " + candidatos + " already exists.", ex); 
     } 
     throw ex; 
    } finally { 
     if (em != null) { 
      em.close(); 
     } 
    } 
} 

public void edit(Candidatos candidatos) throws NonexistentEntityException, Exception { 
    EntityManager em = null; 
    try { 
     em = getEntityManager(); 
     em.getTransaction().begin(); 
     candidatos = em.merge(candidatos); 
     em.getTransaction().commit(); 
    } catch (Exception ex) { 
     String msg = ex.getLocalizedMessage(); 
     if (msg == null || msg.length() == 0) { 
      Integer id = candidatos.getIdentificacion(); 
      if (findCandidatos(id) == null) { 
       throw new NonexistentEntityException("The candidatos with id " + id + " no longer exists."); 
      } 
     } 
     throw ex; 
    } finally { 
     if (em != null) { 
      em.close(); 
     } 
    } 
} 

public void destroy(Integer id) throws NonexistentEntityException { 
    EntityManager em = null; 
    try { 
     em = getEntityManager(); 
     em.getTransaction().begin(); 
     Candidatos candidatos; 
     try { 
      candidatos = em.getReference(Candidatos.class, id); 
      candidatos.getIdentificacion(); 
     } catch (EntityNotFoundException enfe) { 
      throw new NonexistentEntityException("The candidatos with id " + id + " no longer exists.", enfe); 
     } 
     em.remove(candidatos); 
     em.getTransaction().commit(); 
    } finally { 
     if (em != null) { 
      em.close(); 
     } 
    } 
} 

public List<Candidatos> findCandidatosEntities() { 
    return findCandidatosEntities(true, -1, -1); 
} 

public List<Candidatos> findCandidatosEntities(int maxResults, int firstResult) { 
    return findCandidatosEntities(false, maxResults, firstResult); 
} 

private List<Candidatos> findCandidatosEntities(boolean all, int maxResults, int firstResult) { 
    EntityManager em = getEntityManager(); 
    try { 
     CriteriaQuery cq = em.getCriteriaBuilder().createQuery(); 
     cq.select(cq.from(Candidatos.class)); 
     Query q = em.createQuery(cq); 
     if (!all) { 
      q.setMaxResults(maxResults); 
      q.setFirstResult(firstResult); 
     } 
     return q.getResultList(); 
    } finally { 
     em.close(); 
    } 
} 

public Candidatos findCandidatos(Integer id) { 
    EntityManager em = getEntityManager(); 
    try { 
     return em.find(Candidatos.class, id); 
    } finally { 
     em.close(); 
    } 
} 

public int getCandidatosCount() { 
    EntityManager em = getEntityManager(); 
    try { 
     CriteriaQuery cq = em.getCriteriaBuilder().createQuery(); 
     Root<Candidatos> rt = cq.from(Candidatos.class); 
     cq.select(em.getCriteriaBuilder().count(rt)); 
     Query q = em.createQuery(cq); 
     return ((Long) q.getSingleResult()).intValue(); 
    } finally { 
     em.close(); 
    } 
} 

}

但當類CandidatosJpaController我實例的類

public static void main(String[] args) { 
    Candidatos candi = new Candidatos(); 
    candi.setIdentificacion(1); 
    candi.setNombre("juan"); 
    candi.setApellido("ovalle"); 
    candi.setCurso("1001"); 
    candi.setVotos(1); 
    CandidatosJpaController control = new CandidatosJpaController(); 

說我構造CandidatosJpaController不能應用於給定類型,該電源線:EntityManagerFactory的。

會發生什麼? ,因爲如果我創建一個空的構造函數 說我: 線程「主」java.lang.UnsupportedOperationException異常: 不支持。 在controladores.CandidatosJpaController。(CandidatosJpaController.java:31) 在votaciones.Votaciones.main(Votaciones.java:26)

+2

錯誤信息非常清晰,我認爲。沒有無參數的構造函數。 – 2013-03-07 23:32:44

+2

我不想聽起來粗魯,但JPA非常複雜。如果你不掌握Java的基礎知識(比如構造函數參數),那麼你每次都會碰壁。首先用簡單的程序學習Java基礎知識。 – 2013-03-07 23:35:44

+0

**不能應用於給定的類型,請求:EntityManagerFactory **表示您將其他的東西而不是** EntityManagerFactory **傳遞給CandidatosJpaController custructor – spiritwalker 2013-03-07 23:39:03

回答

0

你仍然需要一個解決方案?或者也許其他用戶需要它。

這種變化你的構造:

CandidatosJpaController control = new CandidatosJpaController(Persistence.createEntityManagerFactory("XXX")); 

更換XXX值與您的持久性單元名稱,請參閱persistence.xml知道。