Отображение данных из базы данных с использованием Hibernate - PullRequest
0 голосов
/ 06 марта 2020

Я новичок в спящем режиме, и я борюсь с проблемой. Я хочу отобразить список объектов на странице .X HTML, используя JSF. Но я не знаю почему, я теряю данные по дороге. Несмотря на то, что метод из DAO возвращает список объектов из базы данных (я видел это, выполняя отладку), когда я пытаюсь назначить этот список списку пользователей из другого класса, я теряю эти данные, и список из DAO становится нулевым. Так что нет никаких результатов в GUI из моей таблицы данных.

public class UsersBean {

        private List<User> allUsers;

        public UsersBean() {
        init();
        }

        private void init() {
        UsersController.doInitialise(allUsers);
        }

  // getters, setters

    }


public class UsersController {

    public static void doInitialise(List<User> users) {

    users = new ArrayList<User>();
    UserDao userDao = new UserDaoImpl();
    users = userDao.getAllEnities();
    System.out.println(users.toString());
    }

}

public class UserDaoImpl{

    @Override
    public List<User> getAllEnities() {

    List<User> users= null;
    Session session = null;
    Transaction transaction = null;
    try {
        session = sessionFactory.openSession();
        transaction = session.beginTransaction();
        org.hibernate.query.Query query = session.createQuery("from User");
        users= query.list();
        transaction.commit();
    }  finally {
        session.close();
    }
    return users;
    }

}

Ответы [ 2 ]

2 голосов
/ 06 марта 2020

Если вы хотите изменить содержимое исходного списка, не назначайте ему другой объект списка, это не будет иметь никакого эффекта.

Вместо этого просто измените содержимое напрямую, то есть:

public static void doInitialise(List<User> users) {

UserDao userDao = new UserDaoImpl();
users.addAll(userDao.getAllEnities());
System.out.println(users.toString());

}
1 голос
/ 06 марта 2020

Вы не присваиваете значение allUsers в UsersBean, возможно, поэтому оно не работает. Чтобы он заработал, выполните рефакторинг doInitialise, чтобы получить List<User>, затем в UsersBean просто назначьте пользователей.

class UsersBean {

    private List<User> allUsers;

    public UsersBean() {
        init();
    }

    private void init() {
        this.allUsers = UsersController.doInitialise();
    }
}
public class UsersController {

    public static List<User> doInitialise() {
        UserDao userDao = new UserDaoImpl();

        return userDao.getAllEnities();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...