Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Spring Hibernate getHibernateTemplate()。查找以选择列_Java_Hibernate_Spring - Fatal编程技术网

Java 使用Spring Hibernate getHibernateTemplate()。查找以选择列

Java 使用Spring Hibernate getHibernateTemplate()。查找以选择列,java,hibernate,spring,Java,Hibernate,Spring,我正在使用 List<USERS> user = getHibernateTemplate().find("select uid, username,email from USERS"); 列出用户= getHibernateTemplate().find(“选择uid、用户名、来自用户的电子邮件”); 从用户表中获取三列值。但是我不能使用“user”对象访问任何单独的列值,因为“user”类型是一种对象类型,我不能将其强制转换给用户。 是否有任何方法可以使用“用户”对象

我正在使用

List<USERS> user =
    getHibernateTemplate().find("select uid, username,email from USERS");
列出用户=
getHibernateTemplate().find(“选择uid、用户名、来自用户的电子邮件”);
从用户表中获取三列值。但是我不能使用“user”对象访问任何单独的列值,因为“user”类型是一种对象类型,我不能将其强制转换给用户。
是否有任何方法可以使用“用户”对象并访问单个列的值?

为什么只查询所选列?只需获取整行即可。让我知道这是否有用。

我猜您的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
}
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);
List users=getHibernateTemplate().find(“来自用户”);
for(用户:用户){
//你可能不需要身份证,所以我跳过这个
字符串email=user.getEmail();
字符串userName=user.getUserName();
//现在对用户名和电子邮件地址进行一些操作
}
如果您使用ORM框架,请处理对象,而不是数据库列

关于命名:


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

,如果只获取少数列,hibernate模板将返回对象数组列表

你的例子应该是这样的

List<Object[]> userDetails =
getHibernateTemplate().find("select uid, username,email from USERS");
列出用户详细信息=
getHibernateTemplate().find(“选择uid、用户名、来自用户的电子邮件”);

你应该知道第一个元素是一个整数,第二个,第三个是字符串,你可以自己进行转换。当然,这很容易出错。

谢谢尼利斯和肖恩的建议。我总是处理对象而不是单个列。但这个特定的应用程序与另一个应用程序中的其他表一起工作,该应用程序不是用Java编写的(这就是为什么我使用USERS表而不是“User”,因为它已经由另一个应用程序创建),并且不使用hibernate。我创建了一个实现UserDetails的USERS类,它的列比原始的AppUsers表少得多。当我得到整个对象时,我得到了一个格式化错误,这就是为什么我尝试使用选定列而不是对象。无论如何,我编写了这段代码,并且能够得到各个列:

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);
        }
列表用户=
getHibernateTemplate().find(“选择uid0和obj_type=1的用户的uid、用户名和电子邮件”);
列表l=新的ArrayList();
对于(int i=0;i

我的最后一个问题:获取整个列(对象)是否比获取单个列更昂贵

记住

getHibernateTemplate.find()
方法根据传递的对象返回列表

然后在此之后,您必须获取用户列表,然后您必须分离所有生成的对象,在指定对象之后,您可以访问该对象的属性

这很容易

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


我会尽力的。

你可以试试这样的东西:

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
}
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);
试试这个

List<USERS> user =(List&lt;USERS>)(List&lt;?>)
    getHibernateTemplate().find("select uid, username,email from USERS");
列表用户=(列表用户>)(列表?>)
getHibernateTemplate().find(“选择uid、用户名、来自用户的电子邮件”);

请发布用户类的结构。非常感谢Kaylan,我做了一些与你建议的类似的事情,并且成功了。就在你消耗的网络带宽中。通常,这不是一个问题,但你需要意识到这一点。