Поле гибернации Dropwizard не заполняется

У меня есть очень простой пользовательский объект, который заполняет поле имени пользователя и пароля из базы данных (h2).

Кажется, я не могу добавить дополнительное поле для boolean isAdmin - я пробовал примитивное и объектное логическое значение. Выполнение спящего режима SQL регистрируется, и когда я запускаю, он возвращает все поля из пользовательской таблицы для данного пользователя, включая значение boolean (true). Но Boolean остается null.

Любые идеи, как я могу заполнить это поле?

@Entity
@Table(name = "users")
@NamedQueries({
    @NamedQuery(
        name = "eu.wansdyke.smaash.core.User.findAll",
        query = "SELECT u FROM User u"
    ),
    @NamedQuery(
        name = "eu.wansdyke.smaash.core.User.deleteByUsername",
        query = "DELETE FROM User WHERE username = :username"
    ),
    @NamedQuery(
        name = "eu.wansdyke.smaash.core.User.findByUsername",
        query = "SELECT u FROM User u WHERE u.username = :username"
    )
})
@NamedNativeQueries({
    @NamedNativeQuery(
        name = "eu.wansdyke.smaash.core.User.setPassword",
        query = "merge into users (username, password) key(username) values (:username, :password)"
    )
})
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(name = "username", nullable = false)
    private String username;

    @Column(name = "password", nullable = false)
    private String password;

    @Column(name = "isadmin", nullable = false)
    private Boolean isAdmin;

    public User() {
    }

    public User(String username) {
        this.username = username;
    }

    public long getId() {
        return id;
    }

    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }

    public Boolean isAdmin() {
        return isAdmin;
    }
}

person rich    schedule 02.09.2014    source источник


Ответы (2)


Одним из способов чистого ООП является использование полного конструктора (без идентификатора).

public User(String username, String password, Boolean isAdmin) {
  this.username = username;
  this.password = password;
  this.isAdmin = isAdmin;
}

Теперь вы можете инициализировать поле перед его сохранением в базе данных.

person Community    schedule 02.09.2014
comment
Значение поля находится в базе данных, при чтении оно не заполняется. - person rich; 02.09.2014
comment
Он должен быть заполнен этим конструктором. - person ; 02.09.2014

Понятно.

Код аутентификатора dropwizard, который я использовал, создавал сам объект User, а не использовал объект, извлеченный из спящего режима. Спящий код в порядке.

person rich    schedule 02.09.2014