2013-12-01 4 views
0

Я разрабатываю простую систему регистрации, которая позволяет пользователям регистрироваться. У меня есть следующие конфигурации, лица и службы:[Ljava.lang.Object; не может быть отнесен к com.jules.esiee.entities.Utilisateur

persistence.xml

<?xml version="1.0" encoding="UTF-8" ?> 
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
    http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="pro-jpa" transaction-type="JTA"> 
     <jta-data-source>jdbc/__testPerso</jta-data-source> 
     <class>com.jules.esiee.entities.Utilisateur</class> 
      <properties> 
       <property name="eclipselink.ddl-generation" value="create-tables" /> 
      </properties> 
    </persistence-unit> 
</persistence> 

Bean Utilisateur.java

package com.jules.esiee.entities; 



import javax.ejb.EJB; 
import javax.faces.application.FacesMessage; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped; 
import javax.faces.component.UIComponent; 
import javax.faces.context.FacesContext; 
import javax.faces.validator.ValidatorException; 
import javax.persistence.*; 

import com.jules.esiee.dao.UtilisateurDao; 

@ManagedBean 
@RequestScoped 
@Entity 
@Table(name="utilisateur") 
public class Utilisateur { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private long id; 
    @Column(name="nom") 
    private String nom; 
    @Column(name="prenom") 
    private String prenom; 
    @Column(name="age") 
    private int age; 

    @EJB 
    @Transient 
    private UtilisateurDao userDao; 


    public long getId() 
    { 
     return id; 
    } 
    public void setId(long _id) 
    { 
     id = _id; 
    } 
    public String getNom() 
    { 
     return nom; 
    } 
    public void setNom(String _nom) 
    { 
     nom = _nom; 
    } 
    public String getPrenom() 
    { 
     return prenom; 
    } 
    public void setPrenom(String _prenom) 
    { 
     prenom = _prenom; 
    } 
    public int getAge() 
    { 
     return age; 
    } 
    public void setAge(int _age) 
    { 
     age = _age; 
    } 

    public void sauvegarde() throws Exception 
    { 
     userDao.creer(this); 
    } 

    public void validationAge(FacesContext context, UIComponent component, Object convertedValue) throws ValidatorException { 
     this.age = (int) convertedValue; 
     if(!testAge()) 
     { 
      throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Vous êtes mineur",null)); 
     } 
    } 

    public String validation() 
    { 
     FacesContext facesContext = FacesContext.getCurrentInstance(); 
     if(!this.testAge()) 
     { 
      facesContext.addMessage("f:age", new FacesMessage(FacesMessage.SEVERITY_ERROR,"Erreur sur l'âge, vous êtes mineur, bande de bouffons", "test")); 
      return null; 
     } 
     else 
     { 
      if(!alreadyInDB()) 
      { 
       //this.sauvegarde(); 
       return "listeUser"; 
      } 
      else 
      { 
       facesContext.addMessage("f:nom", new FacesMessage(FacesMessage.SEVERITY_ERROR,"Utilisateur déjà existant", "test")); 
       return null; 
      } 
     } 
    } 

    public boolean alreadyInDB() 
    { 
     if(userDao.trouver(this) == null) 
     { 
      return false; 
     } 
     else 
     { 
      return true; 
     } 
    } 

    public boolean testAge() 
    { 

     if(this.age < 18) return false; 
     return true; 
    } 

} 

DAO UtilisateurDao.java

package com.jules.esiee.dao; 


import java.io.Serializable; 

import javax.persistence.*; 
import javax.ejb.*; 

import com.jules.esiee.entities.Utilisateur; 

@Stateless 
public class UtilisateurDao implements Serializable{ 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    private static final String JPQL_SELECT_ALREADY = "SELECT u.prenom,u.nom,u.age FROM Utilisateur u WHERE u.prenom=:prenom AND u.nom=:nom AND u.age=:age"; 

    // Injection du manager, qui s'occupe de la connexion avec la BDD 
    @PersistenceContext(unitName = "pro-jpa") 
    private EntityManager em; 


    // Enregistrement d'un nouvel utilisateur 
    public void creer(Utilisateur utilisateur) throws Exception { 
     try { 
      em.persist(utilisateur); 
     } catch (Exception e) { 
      throw new Exception(e); 
     } 
    } 

    // Recherche d'un utilisateur à parter de son adresse email 
    public Utilisateur trouver(Utilisateur _utilisateur){ 
     Utilisateur utilisateur = null; 
     Query requete = em.createQuery(JPQL_SELECT_ALREADY); 
     requete.setParameter("prenom", _utilisateur.getPrenom()); 
     requete.setParameter("nom", _utilisateur.getNom()); 
     requete.setParameter("age", _utilisateur.getAge()); 
     try { 
      utilisateur = (Utilisateur) requete.getSingleResult(); 
     } catch (NoResultException e) { 
      return null; 
     } 
     return utilisateur; 
    } 
} 

Есть 2 проблемы:

Когда я сохраняю нового пользователя, он не отображается в базе данных. Никакое исключение не бросается сюда.

Когда я выбираю существующего пользователя, он выдает следующее исключение:

[Ljava.lang.Object; не может быть отлит в com.jules.esiee.entities.Utilisateur

Я действительно не понимаю, что возвращает метод getSingleResult().

ответ

1

Сначала я предлагаю отделить Сущность от управляемого компонента. Сущность не должна ничего знать о DAO или управляемом компоненте. Во-вторых, попробуйте аннотировать метод «sauvegarde» в DAO, используя @TransactionAttribute (TransactionAttributeType.REQUIRES_NEW).

Смежные вопросы