如何在Primefaces数据表中显示Hibernate查询结果? [英] How to show Hibernate query result in Primefaces datatable?

查看:96
本文介绍了如何在Primefaces数据表中显示Hibernate查询结果?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

它可能是一个简单的问题,我在我的托管bean中有一个使用hibernate的本地查询,我的目标是将它显示在一个可执行的primefaces数据表中。

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

tx = session.beginTransaction();
// Native Query
Query q = session.createSQLQuery(select user from 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:形式> 
< p:dataTable var =carvalue =#{userMBean.retrieveAllUserName()}>
< p:栏>
< f:facet name =header>
名称
< / f:facet>
< h:outputText value =#{car.name}/>
< / p:栏>
< / p:dataTable>
< / h:表格>

然而我得到错误:


#{car.name}:在类型java.lang.String中找不到属性'name'

编辑:
另外,可以更改本机查询以发送多个列。

感谢所有。 尝试返回用户对象的列表:

 查询q = session.createSQLQuery(select firstname,lastname from user); 
//当它是本机查询时,返回的列表是一个数组列表,每个数组都是一行
List< Object []> ls =(List< Object []>)q.list();
//你应该从这个方法返回User对象列表,所以需要创建一个
List< User> users = new ArrayList< User>();
for(Object [] row:ls){//抛出每行
User user = new User(); //实例化一个新的用户
user.setFirstName((String)row [0]); //设置它的名字
user.setLastName((String)row [1]); //设置姓氏
users.add(user); //将User实例添加到列表users
}
返回用户; //返回我们创建的列表

在上面,你需要做一些修改。就像在查询中一样,更改表中的实际列名称。并改变用户对象的创建和设置以符合你的 User 类的定义。



然后在视图中做这样的事情:

 < h:outputText value =#{car.firstName}/> 
< h:outputText value =#{car.lastName}/>


It can be an easy problem, I have a native query with hibernate in my managedbean, my goal is to show it in a datatable of primefaces implementation.

       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;
        }

In my View:

<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>

However i get the error:

"#{car.name}": Property 'name' not found on type java.lang.String

Edit: In addition, the native query can be changed to send more than one column.

Thanks all.

解决方案

Try returning list of User objects:

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

In the above, you need to make some modification. Like in the query change the it have the actual column names in your table. And change the User object creation and setting of props to conform to how your User class is defined.

And then do something like this in the view:

<h:outputText value="#{car.firstName}" />
<h:outputText value="#{car.lastName}" />

这篇关于如何在Primefaces数据表中显示Hibernate查询结果?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆