Как использовать или комментировать фиктивное поле в сущности JPA bean, которая не должна сохраняться в базе данных

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

Здесь код из сущности 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

Любое обходное решение для этого?

Ответы

Ответ 1

Аннотировать любые поля, которые вы не хотите сохранять в качестве @Transient. Он находится в пакете javax.persistence.