Как показать результат запроса Hibernate в виде данных Primefaces? - PullRequest
1 голос
/ 22 декабря 2011

Это может быть легкой проблемой, у меня есть собственный запрос с hibernate в моем управляемом бине, моя цель - показать его в реализации простых данных.

       public List<User> retrieveAllUserName() {
            Transaction tx = null;
            Session session = HibernateUtil.getSessionFactory().openSession();

            tx = session.beginTransaction();
            //Native Query
            Query q = session.createSQLQuery("select name from user");
            List<User> ls = q.list();
            System.out.println("query executed");
            for (int i = 0; i < ls.size(); i++) {
                System.out.println("UserName:" + ls.get(i));
            }
        return ls;
        }

На мой взгляд:

<h:form>
        <p:dataTable var="car" value="#{userMBean.retrieveAllUserName()}">
            <p:column>
                <f:facet name="header">
                    Name
                </f:facet>
                <h:outputText value="#{car.name}" />
            </p:column>
        </p:dataTable>
    </h:form>

Однако я получаю ошибку:

"# {car.name}": имя свойства не найдено для типа java.lang.String

Edit: Кроме того, собственный запрос может быть изменен для отправки более одного столбца.

Спасибо всем.

Ответы [ 2 ]

2 голосов
/ 22 декабря 2011

Попробуйте вернуть список User объектов:

Query q = session.createSQLQuery("select firstname, lastname from user");
//when it's native query, returned list is a list of arrays, and each array is a row
List<Object[]> ls = (List<Object[]>) q.list();
//you should return list of User object from this method, so need to create one
List<User> users = new ArrayList<User>();
for (Object[] row : ls) { // go throw each row
    User user = new User(); // instantiate a new User
    user.setFirstName((String) row[0]); // set it's first name
    user.setLastName((String) row[1]);  // set it's last name
    users.add(user); // add the User instances to the list "users"
}
return users; //return the list we created

Выше необходимо внести некоторые изменения. Как и в запросе, измените фактические имена столбцов в вашей таблице. И измените создание объекта User и настройку реквизита, чтобы соответствовать определению вашего класса User.

А затем сделайте что-то вроде этого в представлении:

<h:outputText value="#{car.firstName}" />
<h:outputText value="#{car.lastName}" />
0 голосов
/ 22 декабря 2011

Вы можете использовать HQL следующим образом:

   public List<User> retrieveAllUserName() {
        Transaction tx = null;
        Session session = HibernateUtil.getSessionFactory().openSession();

        tx = session.beginTransaction();
        //Native Query
        Query q = session.createQuery("from user");
        List<User> ls = q.list();
        System.out.println("query executed");
        for (User u:ls) {
            System.out.println("UserName:" + u.getName());
        }
        return ls;
    }
...