关于hibernate的查询问题,在线请教高手来解答 本帖最后由 mahongcai 于 2009-12-09 16:09:53 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 貌似用了联合主键,去年第一个条件(deviceIp=null)是什么效果? "select new com.ysten.dto.NetworkElementDto(ne.neStatus) from " + "NeState ne where 1=1";select new com.ysten.dto.NetworkElementDto执行是把当前查询的NeState 转化为一个NetworkElementDto,所以一个id对应一个new NetworkElementDto。from Nestate是一次查询所有的NeState ,并转化为一个list. 我理解也是这个意思啊, 但是为什么一个id对应一条sql语句呢? 而不是一次查询所有的?然后子啊封装成dto啊? 确实用了联合主键,我的语句执行时所有条件都为真,查询出了所有的数据,但每条数据都是以一条sql语句并以主键为条件去数据库查询的。 而不是一次查询出所有的? 请问这跟联合主键有点关系是吗? 所谓联合主键就是由大于1个主键构成,而你的条件只是联合主键的一个子键,当然是查询出很多条记录了。举个例子吧:public class UserPK{ private String firstName; private String lastName;}public class User{ private UserPK id; private String phone; private String address; private Calendar birthday;}User映射到数据表时大致如下:table_userfirstName lastName phone address birthday---------------------------------------------------------张 小明 010-888 北京市 2008-08-08张 大明 021-888 上海市 2007-07-07刘 小芳 020-888 广州市 2006-06-07张 小华 022-888 天津市 2005-05-05假如要查询出“张小明”的用户,而按楼主的条件就会查询出“张小明”、“张大明”和“张小华”三条记录,因为你的条件是:from User u where u.id.firstName='张'所以联合主键查询应将其作一个主键,如下:from User u where u.id=?问号代替的参数应该是UserPK对象,例如u.id=new UserPK("张","小明"); 谢谢你的帮助, 那我问个问题,如果你的hql语句改成from User u 然后直接查询,hibernate是去数据库请求一条select * from User 语句还是去数据库请求4次(每次都已主键为条件分开查询)呢? 用数据库控制级联菜单 struts1.2源代码如何打成JAR包 工作求助 sql查询 一个老问题,但一直解决不掉 struts1.2编写单据明细 关于多ip的无堵塞通讯问题! sf 一个登陆的问题。。。。。 高并发和超高性能!最优的RESIN应用服务器 特别奇怪的hibernate问题 音频存成xml,请大家给予指点
+ "NeState ne where 1=1";select new com.ysten.dto.NetworkElementDto执行是把当前查询的NeState 转化为一个NetworkElementDto,所以一个id对应一个new NetworkElementDto。
from Nestate是一次查询所有的NeState ,并转化为一个list.
private String firstName;
private String lastName;
}public class User{
private UserPK id;
private String phone;
private String address;
private Calendar birthday;
}
User映射到数据表时大致如下:
table_user
firstName lastName phone address birthday
---------------------------------------------------------
张 小明 010-888 北京市 2008-08-08
张 大明 021-888 上海市 2007-07-07
刘 小芳 020-888 广州市 2006-06-07
张 小华 022-888 天津市 2005-05-05假如要查询出“张小明”的用户,而按楼主的条件就会查询出“张小明”、“张大明”和“张小华”三条记录,因为你的条件是:
from User u where u.id.firstName='张'所以联合主键查询应将其作一个主键,如下:
from User u where u.id=?
问号代替的参数应该是UserPK对象,例如u.id=new UserPK("张","小明");