2010-11-07 16 views
13

J'ai ce code pour la validation de connexion à l'aide d'une classe d'action Struts2 qui appelle un EJB pour la validation LDAP, puis if (informations d'identification LDAP) validée, interrogeant la base de données des utilisateurs pour obtenir le reste des informations de l'utilisateur en utilisant le bean entity JPA qui agit également comme un POJO. Contrairement au nom d'utilisateur, à l'ID utilisateur et aux autres informations utilisateur, le mot de passe n'est pas stocké dans la base de données, mais pour la méthode getJet et accesseur POJO, j'essaie d'inclure un champ mot de passe fictif.Comment utiliser ou annoter un champ fictif dans un bean entité JPA qui n'est pas supposé être conservé dans la base de données

Le problème est après l'authentification ldap, une exception se produit en indiquant que la colonne « mot de passe » n'existe pas dans la base de données (qui n'a jamais été censé être quand même!)

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException 
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'PASSWORD' in 'field list' 
Error Code: 1054 
Call: SELECT PERSON_ID, ACTIVE_USER, EMAIL, FIRSTNAME, SURNAME, PASSWORD, FULLNAME, EMPLOYEE_NUMBER FROM xxte_employees WHERE (ACTIVE_USER = ?) 
     bind => [john.doe] 
Query: ReadAllQuery(name="XxteEmployees.validateLogin" referenceClass=XxteEmployees sql="SELECT PERSON_ID, ACTIVE_USER, EMAIL, FIRSTNAME, SURNAME, PASSWORD, FULLNAME, EMPLOYEE_NUMBER FROM xxte_employees WHERE (ACTIVE_USER = ?)") 
     at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333) 
     at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:687) 
     at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:530) 
     at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:529) 
.... 

est ici le code de l'entité bean:

public class XxteEmployees implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Column(name = "ACTIVE_USER") 
    private String activeUser; 
    @Column(name = "EMAIL") 
    private String email; 
    @Id 
    @Basic(optional = false) 
    @Column(name = "PERSON_ID") 
    private Double personId; 
    @Column(name = "EMPLOYEE_NUMBER") 
    private Double employeeNumber; 
    @Column(name = "FIRSTNAME") 
    private String firstname; 
    @Column(name = "SURNAME") 
    private String surname; 

    private String fullname; 

    private String password; 

    public XxteEmployees() { 
    } 

    public XxteEmployees(Double personId) { 
     this.personId = personId; 
    } 

    public String getActiveUser() { 
     return activeUser; 
    } 

    public void setActiveUser(String activeUser) { 
     this.activeUser = activeUser; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public Double getPersonId() { 
     return personId; 
    } 

    public void setPersonId(Double personId) { 
     this.personId = personId; 
    } 

    public Double getEmployeeNumber() { 
     return employeeNumber; 
    } 

    public void setEmployeeNumber(Double employeeNumber) { 
     this.employeeNumber = employeeNumber; 
    } 

    public String getFirstname() { 
     return firstname; 
    } 

    public void setFirstname(String firstname) { 
     this.firstname = firstname; 
    } 


    public String getSurname() { 
     return surname; 
    } 

    public void setSurname(String surname) { 
     this.surname = surname; 
    } 

    // BEGIN: objects not in db 

    public String getFullname() { 
     return firstname + ' ' + surname; 
    } 


    public void setFullname(String fullname) { 
     this.fullname = firstname + ' ' + surname;; 
    } 

    public String getPassword() { 
     return sifre; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 
    // END: objects not in db 

Une solution de contournement pour cela?

Répondre

40

Annotez les champs que vous ne souhaitez pas conserver comme @Transient. C'est dans le paquet javax.persistence.

+0

Oui, en effet, cela résout le problème. Merci, Steve. – Skyhan