我正在使用
List<USERS> user =
getHibernateTemplate().find("select uid, username,email from USERS");
从用户TABLE获取三列值。但是我可以使用“user”对象访问任何单独的列值,因为“user”类型是对象类型,我无法将其强制转换为USERS。 有没有办法使用“用户”对象并访问单个列值?
答案 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<USERS>)(List<?>)
getHibernateTemplate().find("select uid, username,email from USERS");