hibernate单独查询几列的问题,如何返回一个bean

safewolf 2010-01-09 06:09:38
有一个表table_user,有列id,user_name,user_password
对于的bean TableUser有id,userName,userPassword属性

我想做一个查询只查所有的userName,并且返回一个List<TableUser>
每一行为
id = null
userName = "somgthing here"
userPassword = null

或者就返回一个List<Map>
每一行数据为
"userName"="something here"


应该怎么做?hql或者native sql都可以

我试了半天了,不是报错就是出来的结果不是key=》value的形式,只是
0 : 'something here'
...全文
550 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
huxiaoyuan222 2010-01-10
  • 打赏
  • 举报
回复
学习了,你们都很强大
道光2008 2010-01-09
  • 打赏
  • 举报
回复
可以参考,我的博客的另一种解决方案
道光2008 2010-01-09
  • 打赏
  • 举报
回复
SELECT new xxx.xxx.xxx.xx.User(t.id, t.username) FROM User t;
然后在User 使用查询列id,username做一个构造函数,不过仅限于hibernate3以上版本
Java526 2010-01-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lovehuazi 的回复:]
select username from TableUser

使用query的查询返回的就是List集合,查询一列返回的类型就是你数据库字段的类型
循环遍历的时候直接用该类型的变量接收就行啊....
[/Quote]

UP
islandrabbit 2010-01-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 safewolf 的回复:]
引用 8 楼 bao110908 的回复:
JPQL 和 HQL 都支持这样的写法:

SELECT new xxx.xxx.xxx.xx.User(t.id, t.username) FROM User t;

User 类中建一个,以 id 和 username 的构造方法,别忘了再加一个空的构造。

这样查出来的就是 User 对象,而不是 Object[] 了。


这样写好像还是很麻烦

因为我同时还想实现动态的select某些字段

所以 new User的时候,这个User是不确定的。。。
[/Quote]


解决动态瑟select可以试试以下代码:

Criteria c = session.createCriteria(TestItem.class);

ProjectionList projectionList = Projections.projectionList();

if(true){
projectionList.add(Projections.property("name").as("name"));
}

c.setProjection(projectionList)
.setResultTransformer(new AliasToBeanResultTransformer(TestItem.class));

crazylaa 2010-01-09
  • 打赏
  • 举报
回复
要map,不如直接sql。
baobaohehe 2010-01-09
  • 打赏
  • 举报
回复
做一个实体包括那2列user_name和userName就可以返回一个bean了
islandrabbit 2010-01-09
  • 打赏
  • 举报
回复
用下面的方法让Hibernate帮你new,同时只选你想要的列:

String hql = "select new TableUser(u.userName) from TableUser u";

List<TableUser> list = session.createQuery(hql).list();

safewolf 2010-01-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 bao110908 的回复:]
JPQL 和 HQL 都支持这样的写法:

SELECT new xxx.xxx.xxx.xx.User(t.id, t.username) FROM User t;

User 类中建一个,以 id 和 username 的构造方法,别忘了再加一个空的构造。

这样查出来的就是 User 对象,而不是 Object[] 了。
[/Quote]

这样写好像还是很麻烦

因为我同时还想实现动态的select某些字段

所以 new User的时候,这个User是不确定的。。。
islandrabbit 2010-01-09
  • 打赏
  • 举报
回复
用下面的方法让Hibernate帮你new,同时只选你想要的列:

String hql = "select new TableUser(u.userName) from TableUser u";

List<TableUser> list = session.createQuery(hql).list();

archko 2010-01-09
  • 打赏
  • 举报
回复
select new()...........上面说的,
createQuery().addEntity(User.class)好像要加上这个才可以
  • 打赏
  • 举报
回复
JPQL 和 HQL 都支持这样的写法:

SELECT new xxx.xxx.xxx.xx.User(t.id, t.username) FROM User t;

User 类中建一个,以 id 和 username 的构造方法,别忘了再加一个空的构造。

这样查出来的就是 User 对象,而不是 Object[] 了。
safewolf 2010-01-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lovehuazi 的回复:]
如果大于等于两列的话,返回的就是一个object[],是得一个一个的new出来,但是要查询那么多字段的话,还不如直接查询整个实体呢?难道字段很多,怕浪费资源么....
[/Quote]

是的,而且问题是比如我查询用户列表,我不希望取到密码的
或者我查的是一个带image或者blob类型字段的,也不希望将这些字段select出来的

如果没有好办法,那我就自己一个个的new然后赋值去了,呵呵
水中影子 2010-01-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lovehuazi 的回复:]
select username from TableUser

使用query的查询返回的就是List集合,查询一列返回的类型就是你数据库字段的类型
循环遍历的时候直接用该类型的变量接收就行啊....
[/Quote]

UP
lovehuazi 2010-01-09
  • 打赏
  • 举报
回复
如果大于等于两列的话,返回的就是一个object[],是得一个一个的new出来,但是要查询那么多字段的话,还不如直接查询整个实体呢?难道字段很多,怕浪费资源么....
lovehuazi 2010-01-09
  • 打赏
  • 举报
回复
select username from TableUser

使用query的查询返回的就是List集合,查询一列返回的类型就是你数据库字段的类型
循环遍历的时候直接用该类型的变量接收就行啊....
safewolf 2010-01-09
  • 打赏
  • 举报
回复
不能直接返回类似的结果吗?
如果返回结果有1000条,要做个循环每个都new出来?
而且如果我要取的不是1个字段,是10个字段,也得这么一个个的自己填进去?
whut_lcy 2010-01-09
  • 打赏
  • 举报
回复
blq
Sunny_kaka 2010-01-09
  • 打赏
  • 举报
回复
你的需求比较独特..
如果你查的是UserTable对象,id肯定是会出来的.
你可以只查select TableUser.userName,返回一个List<String>.再手动new个新的对象把username填进去.

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧