使用Spring Hibernate getHibernateTemplate()。find来选择列

时间:2011-03-03 23:05:04

标签: java hibernate spring

我正在使用

List<USERS> user =
    getHibernateTemplate().find("select uid, username,email from USERS");

从用户TABLE获取三列值。但是我可以使用“user”对象访问任何单独的列值,因为“user”类型是对象类型,我无法将其强制转换为USERS。 有没有办法使用“用户”对象并访问单个列值?

8 个答案:

答案 0 :(得分:3)

为什么你只是查询选定的列 - 只需获取整行。如果有帮助,请告诉我。

答案 1 :(得分:2)

@Override
public Object findByNo(Object id) throws Exception {
    List list = getHibernateTemplate().find(
            "select book from Book book " +
                    "where book.id=?",id);
    if (list.size() != 0) {
        return list.get(0);
    } else {
        return new Book();
    }
}

答案 2 :(得分:1)

如果只提取少量列,则hibernate模板将返回一个对象数组列表。

你的例子应该是这样的,

List<Object[]> userDetails =
getHibernateTemplate().find("select uid, username,email from USERS");

你应该知道第一个元素是一个整数,第二个,第三个是字符串,并且你自己进行投射。这是非常容易出错的。

答案 3 :(得分:1)

感谢Nilesh和Sean的建议。我总是处理对象而不是单个列。但是这个特定的应用程序可以与另一个不是用Java编写的应用程序的其他表一起使用(这就是为什么我使用USERS表而不是“User”,因为它已经由另一个应用程序创建)并且没有使用hibernate。我创建了一个实现UserDetails的USERS类,其列数比原来的应用程序USERS表少得多。当我得到整个对象时,我得到一个格式化错误,这就是为什么我尝试使用选定的列而不是object.Anyhow我写了这个代码,并能够得到各个列:

List user= 
            getHibernateTemplate().find("select uid, username,email from USERS where uid<>0 AND obj_type=1");


        List<USERS> l = new ArrayList<USERS>(); 
        for (int i = 0; i < user.size(); i++) {
            USERS du = new USERS(); 
            Object[] obj = (Object[]) user.get(i);

            Integer uid = (Integer) obj[0];
            du.setUid(uid);
            String username = (String) obj[1];
            du.setUsername(username); 
            String email = (String) obj[2];
            du.setEmail(email); 
            l.add(du);
        }

我的最后一个问题:获取整个列(对象)并不比获得个人列更昂贵吗?

答案 4 :(得分:1)

请记住......

getHibernateTemplate.find()方法返回基于传递对象的List。

然后在此之后您必须获取用户列表,然后您必须将所有结果对象分开,并在指定对象后可以访问它的属性。

很容易..

如果您有任何疑问,请告诉我

我会尽我所能。

答案 5 :(得分:0)

我猜你的db表名为USERS,实体类名为User。如果是这种情况,那么你应该这样做:

List<User> users  = getHibernateTemplate().find("from User");
for(User user: users){
    // you probably don't need the id, so I'll skip that
    String email = user.getEmail();
    String userName = user.getUserName();
    // now do something with username and email address
}

如果您使用ORM框架,请处理对象,而不是数据库列!

关于命名:

Java命名约定表明类名称在TitleCase(或更准确地说是UpperCamelCase),而不是UPPERCASE。此外,代表单个用户的类应该被称为User,而不是Users

答案 6 :(得分:0)

你可以尝试这样的事情:

for (TemplateAttributes templateAttributes1 : templateAttributes) {
                templateAttributes1.setTemplates(templates);
                templateAttributes1.setCreateDate(new Date());
                templateAttributes1.setCreateUser(ApplicationConstants.userName);
                templateAttributes1.setLastModified(new Timestamp(new Date().getTime()));
                templateAttributesNew.add(templateAttributes1);
            }
            templates.setTemplateAttributes(templateAttributesNew);
            templates.setUpdateDate(new Date());
            templates.setUpdateUser(ApplicationConstants.userName);
            templates.setLastModified(new Timestamp(new Date().getTime()));
            getHibernateTemplate().bulkUpdate("delete from TemplateAttributes where templateAttributePK.templates.id="+templates.getId());
            getHibernateTemplate().update(templates);

答案 7 :(得分:0)

试试这个

List<USERS> user =(List&lt;USERS>)(List&lt;?>)
    getHibernateTemplate().find("select uid, username,email from USERS");