本人比较热衷与ibatis以及纯生态sql:)但是碰到2个项目都是Hibernate,用着用着也就碰到麻烦了。
比如
Class User : userId, userName
Class Address : addId,userId, AddressName
一。
如果用HQL查询,需要 select userName,AddressName 这样来自2个不同类的字段,如何定义返回对象?
二。HQL一般返回整个对象,但是比如查询表Address,我只需要 userId,AddressName,不需要addId这个字段一起查出来,怎么处理呢?有时候返回一个带有Blob的对象是不明智的
谢谢各位了:)
问题补充:
到底有没有人认真看答案??
第一个问题是:一个select 查询的结果,包含2张不同表的字段, 如果定义这个返回的对象!!显然不是User或者Address。
第二个问题是:如果我只想知道Address中的 addId,AddressName,不需要返回userId,怎么做
你的类定义的有问题,Class Address中不应该出现userId,应该是User user类,配置ManyToOne,然后hql如下。
第一个问题:
select u.userName, a.AddressName from Address a join User u
或者隐式内连接
select a.user.userName, a.AddressName from Address a
返回类型是List,每个Object在这个例子中都可以强转成String类型。
第二个问题:
select a.addId, a.AddressName from Address a join User u
where u.userName='admin'
如果事先知道userId也可如下:
select a.addId, a.AddressName from Address a
where a.user.userId='5566'//假设是字符串
返回类型是List,每个Object在这个例子中都可以强转成String类型。
你可以使用Query进行部分字段查询.
它支持自定义的sql语句
谁说hibernate不能用select?
hibernate返回的list中可以存数组的。
select a.xx,b.yy from A a join a.b
1,返回的Object[]
2,同1,select userId,AddressName返回Object[]
记得hql里可以直接new对象
select new Person(p.id,p.name) from Person p