У меня есть этот код для проверки входа в систему с использованием класса действий Struts2, который вызывает EJB для проверки LDAP, а затем, если (учетные данные LDAP) проверяются, запрашивая базу данных пользователей для получения остальной пользовательской информации, используя объектный компонент JPA, который также действует как POJO. В отличие от имени пользователя, идентификатора пользователя и другой пользовательской информации, пароль не хранится в базе данных, но ради метода получения и установки POJO я пытаюсь включить фиктивное поле пароля - для обслуживания формы действия Struts2.
Проблема заключается в том, что после аутентификации ldap возникает исключение, указывающее на то, что столбца «пароль» не существует в базе данных (чего никогда не должно было быть!)
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)
....
Вот код из бина сущности:
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
Есть ли обходной путь для этого?