persistencecontext example entitymanagerfactory createentitymanagerfactory consultas java orm jpa

java - example - Cómo usar o anotar un campo ficticio en un bean de entidad JPA que no debe persistir en la base de datos



persistence createentitymanagerfactory (1)

Tengo este código para validación de inicio de sesión utilizando una clase de acción Struts2 que llama a un EJB para validación LDAP y luego, si se validan (credenciales LDAP), se consulta la base de datos del usuario para obtener el resto de la información del usuario utilizando el bean de entidad JPA que también actúa POJO. A diferencia del nombre de usuario, el ID de usuario y otra información del usuario, la contraseña no se almacena en la base de datos, pero por el bien del método de obtención y establecimiento de POJO, intento incluir un campo de contraseña ficticia para servir el formulario de acción de Struts2.

El problema es que después de la autenticación de ldap, se produce una excepción que indica que la columna "contraseña" no existe en la base de datos (¡lo cual nunca debió ser de ninguna manera!)

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) ....

Aquí está el código del bean entidad:

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

¿Alguna solución para esto?


Anote los campos que no desea que se @Transient como @Transient . Está en el paquete javax.persistence .