浏览 3399 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2004-01-12
Type 主键id long类型,name String类型 Type 与 Product 是一对多关系 现在本人现在要用Type的name来查出有多少个Product(这只是一个最简单的示例,有一些是多个表关联查询的) HQL: SELECT COUNT(*) FROM Product p JOIN p.type WHERE p.type.name=:name 在oracle 8I(database Server)的CPU占用率竟然是98%~100%,而造成了oracle不能再访问,不过这个语句如果是在SQL Server的话就不会出现问题。 Hibrenate 生成的SQL语句是(假设表名和PO的类名一样): SELECT COUNT(*) FROM Prodcut p,Type t WHERE p.type=t.id AND t.name=? AND p.type=t.id 其实这个SQL语句一看就写得有点不对劲,为什么要多写一对 p.type=t.id ,不知道各位高手有没有遇到过这种问题呢?? /==============以下这个问题并不是太重要,只是顺便而已=======/ 还有就是关于用TheadLocal来管理Session 的 问题(是在一个Servlet来初始化这个SessionFactory的,没有采用Filter) 如下 Public class A{ void m1(){ // 获得Session //操作 //关闭Session } void m2(){ //获得Session //调用m1() //操作 /*这里就是出错的地方,在这里Session已经被关闭,因为已经在m1里关闭了 //关闭Session } } 不知道各位各手有什么好办法呢??还是我对TheadLocal不是很了解(我的确不是用TheadLocal来管理的, 因为我们调试时很麻烦,不一定是web,我是用动态代理来进行管理分配Session,即在我的DAO里是不用获得Session,我的工厂会自动分配Session给DAO,其实最好还觉得用AOP来管理这些代码,我想有时间就会把我的那个动态代理的改成AOP,也说明一点吧,我的DAO也只是把一些常用的封装了一下,复杂的查询我是让我的Query来进行管理). 好久没有上来了(其实也经常上,只是没有登录,呵呵,因为自己的水平好低,所以也帮不上别人什么忙),快要过年了,祝大家工作顺利. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2004-01-12
SELECT count(*) FROM Product p where p.type.id=?
|
|
返回顶楼 | |
发表时间:2004-01-12
或
SELECT count(*) FROM Product p join p.type type where type.id=? 还是用前一个快。 |
|
返回顶楼 | |
发表时间:2004-01-13
yehs220 真是一个很热心的人,谢谢你
能不能说明点为什么那样就会出错呢,再说我可能也会有多个关联对象进行查询的呀,上面只是一个简单的例子而罢了。 况且在SQL server就没有出错。可能是Oracle 8i的Bug吧. 谢谢你回复,我会去试你所说的解方法的。 |
|
返回顶楼 | |
发表时间:2004-01-13
引用 SELECT COUNT(*) FROM Product p JOIN p.type WHERE p.type.name=:name Hibrenate 生成的SQL语句是(假设表名和PO的类名一样): SELECT COUNT(*) FROM Prodcut p,Type t WHERE p.type=t.id AND t.name=? AND p.type=t.id 其实这个SQL语句一看就写得有点不对劲,为什么要多写一对 p.type=t.id ,不知道各位高手有没有遇到过这种问题呢?? 可能是因为你没有为p.type定义别名吧。 我没看清你是要根据name来查询,我写的前两个查询稍微改改 SELECT count(*); FROM Product p where p.type.name=? 或 SELECT count(*); FROM Product p join p.type type where type.name=? 这两个应该是一样的,前一个更简洁一些 |
|
返回顶楼 | |
发表时间:2004-01-19
谢谢大家的回复。
其实如果我是可以那样子做的话就好了(楼上说的那样子),因为我是要根椐一条语句(HQL)查询出指定数目(分页)的记录后,又要拼出一条HQL来查出总数,因为有时候多表查询是要用join的,特别有时为了性能要用 join fetch这种语句一次性把需要的查询出来(因为谁都不想多次查询数据库吧,从性能上来讲),不知道还有什么好的方法呢???谢谢了,新年快乐? |
|
返回顶楼 | |