高手请进--hibernate 子查询,折磨我好几天了

问题描述

我有个表用来存储论坛的Topic活Reply,结构如下: @Entity @Table(name = "TopicOrReply") public class TopicOrReply implements Serializable{ private Long id; private String title;//标题,如果为空,那么表示“回复”。 private TopicOrReply repliedTopic;//指向该回复对应的topic ... } 现在我想查询topic id是1以及其所有回复的记录集合。 我的做法: Criteria criteria = ((org.hibernate.Session) em.getDelegate()).createCriteria(TopicOrReply.class); Criterion criterion4Topic = Restrictions.and( Restrictions.eq("id",this.getTopicId()), Restrictions.eq("randomCode",this.getRandomCode()) ); Criteria subCriteria = criteria.createCriteria("repliedTopic"); subCriteria.add(criterion4Topic); 但是这样的查询,只能查询出某topic的所有回复,不包括该topic自身。 因为topic和reply的内容没什么区别【前者多一个title而已】,因此采用了一张表“TopicOrReply”。 请问如何把Topic一起查询出来?请问如何把Topic一起查询出来?请问如何把Topic一起查询出来?问题补充:还是这里反映快,hibernate.org里面现在基本没有人回答问题了。2008-05-28 jasongreen (初级程序员)Criterion criterion4Topic = Restrictions.or( Restrictions.and( Restrictions.eq("id",this.getTopicId()), Restrictions.eq("randomCode",this.getRandomCode()) ), Restrictions.eq("repliedTopic.id",this.getTopicId()) )~~~~等我验证下。2008-05-28 jasongreen (初级程序员)select topic,relies from TopicOrReplies as relies join relies.repliedTopic as topic where topic.id=? 这样可以使topic,replies分离,在程序中比较好控制。也可以对replies进行想要的排序~~~~~~~~因为我采用的是Seam方案,而且我需要利用 ScrollableResults cursor = this.getHibernateCriteriaWithoutOrderBy().scroll(); cursor.last(); this.totalRecords = cursor.getRowNumber() + 1;//行编号是从0开始的 cursor.close();这种模式首先查出记录总数!然后计算分页信息。最后根据药抓取的第N页数据是否存在来决定是否去DB抓取数据。1.我只想知道记录总数,不想抓取所有记录。2.我只想抓取第N页的数据。你这个方法是避开了Criterion的用法,我也考虑过。但是目前用Criterion对于翻页来的性能来说,非常重要。Query要想计算总记录数还要用count,而用count又不能用order by,很烦的!所以被我废弃了。问题补充:Criterion criterion4Topic = Restrictions.or( Restrictions.and( Restrictions.eq("id",this.getTopicId()), Restrictions.eq("randomCode",this.getRandomCode()) ), Restrictions.eq("repliedTopic.id",this.getTopicId()) )OK!~~~~多谢!!!但是我依旧不明白一点:这是我按照兄弟的回答进行改造过的能够运行的代码:Criterion criterion4Topic = Restrictions.or( Restrictions.and( Restrictions.eq("id",this.getTopicId()), Restrictions.eq("randomCode",this.getRandomCode()) ), Restrictions.eq("repliedTopic.id",this.getTopicId()) );criteria.add(criterion4Topic);而原来的代码就多了一句话,为什么就不能执行了呢?不能运行的代码如下:Criterion criterion4Topic = Restrictions.or( Restrictions.and( Restrictions.eq("id",this.getTopicId()), Restrictions.eq("randomCode",this.getRandomCode()) ), Restrictions.and( Restrictions.eq("repliedTopic.id",this.getTopicId()), Restrictions.eq("repliedTopic.randomCode",this.getRandomCode()) ));criteria.add(criterion4Topic);请兄弟指教。马上给分。

解决方案

Criterion criterion4Topic = Restrictions.or( Restrictions.and( Restrictions.eq("id",this.getTopicId()), Restrictions.eq("randomCode",this.getRandomCode()) ), Restrictions.eq("repliedTopic.id",this.getTopicId()))
解决方案二:
select topic,relies from TopicOrReplies as relies join relies.repliedTopic as topic where topic.id=?这样可以使topic,replies分离,在程序中比较好控制。也可以对replies进行想要的排序

时间: 2024-08-02 10:52:34

高手请进--hibernate 子查询,折磨我好几天了的相关文章

hbm-Hibernate 帅哥高手请进...关于Hibernate的三表关联,在线等...

问题描述 Hibernate 帅哥高手请进...关于Hibernate的三表关联,在线等... 表1: File (FID,Fname) 表2: UserGroup(GID,Gname) 表3: ActionPermissions(PID,Pname) 表4: File_Group_Permissions(ID,FID,GID,PID) 用四个表完成给某个文件指定用户组每个用户组指定权限,一文件对应多个用户组 每个用户组针对这个文件有不同的操作权限.Hibernate应该如何配置,表结构是否合理

Oracle数据库连接问题,高手请进。

问题描述 先贴代码.Command=Connection.CreateCommand();Command.CommandText=string.Format("select{0}.nextvalfromdual",country.SequenceName);intid=int.Parse(Command.ExecuteScalar().ToString());if(cellarray.ContainsKey("ID"))cellarray["ID"

php curl采集高手请进

问题描述 php curl采集高手请进 http://www.lecai.com/ 这个网站怎么用php/url技术进行模拟登录?求参考程序..... 解决方案 我大致看了一下,个人习惯使用Snoopy.class.php模拟登陆,觉得不好可以忽略 POST http://www.lecai.com/user/ajax_login.php HTTP/1.1Host: www.lecai.comUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:3

微积分-vc 数字图像处理高手请进!

问题描述 vc 数字图像处理高手请进! 图像的梯度锐化 看到上面的公式,我叫一个晕,请问这是哪里才能学到呀?什么意思呀?还需要学习微积分吗? 解决方案 这个公式你仔细琢磨就懂了,第一个实际上是数字的差分,求得是点(i,j)的x和y方向的微分值的和,这里理解为这个像素点的梯度值.第二个就是锐化的过程,当梯度值大于某个阈值时,锐化的结果即此点的梯度值,若梯度小于那个阈值,则锐化的结果是原像素的值. 像这类比较基础的图像处理方法,建议你看一下清华大学章毓名教授写的<图像工程>. 解决方案二: 数字图

apt-ubuntu 高手请进,yara not found

问题描述 ubuntu 高手请进,yara not found 用apt-get intstall yara后,还是出现了configure: error: yara not found 请问为什么会这样,好烦啊,在线求高手解答 解决方案 spt-get install 是安装命令, 如果系统没有找到 yara 的安装包,就会这样. 查查 ubuntu 的在线安装配置. 解决方案二: 一个是看是否安装成功,其次看安装的yara能否执行,有没有错误.

c语言-C语言高手请进:这个分块求和C语言程序问题出在哪里??对一组无规律数据按正数、负数和零分块求和,

问题描述 C语言高手请进:这个分块求和C语言程序问题出在哪里??对一组无规律数据按正数.负数和零分块求和, 对一组无规律数据按正数.负数和零分块求和,即要求将序列中相邻的正数.零及负数分块累加输出,格式要求: 源数据: 2,3,8,6,0,0,-2,-1,-4,0,5,6,7,-5,-2,...(共100个) 整理输出为: 2,5,13,19,0,0,-2,-3,-7,0,5,11,18,-5,-7...(共100个) 以下程序哪里出了问题?我搞了2星期,总是得不到完整输出: int main(

高分悬赏 请大神指导-VBA高手请进 懂得webbrowser

问题描述 VBA高手请进 懂得webbrowser 请问如何通过VBA能够获取网页弹出窗体的Docuement对象,我是要操作弹出窗体里面的一线控件完成自动复制! 我现在可以获取到主页面的Document对象.

vb参数传递-VB高手请进!在线等。。——shell使用dos命令时参数的传递

问题描述 VB高手请进!在线等..--shell使用dos命令时参数的传递 怎样才能将%LOGPATH%所替代的内容传递到其中? (不要写成调用bat的形式) 解决方案 不行的,%logpath%不能包在括号里,应该这样 Shell "cmd /k mkdir "+LOGPATH+" > nul 2>&1", vbNormalNoFocus vb调用dos是直接运行引号内的,而不给某一变量赋值.另外包在百分号内的是bat变量而不是vb的变量 解决

多线程-高手请进!!!---线程安全问题,怎么解决new String 问题

问题描述 高手请进!!!---线程安全问题,怎么解决new String 问题 场景是:一个订单号只能一个在付款,只能一个线程处理,不同的订单号支持并发处理 现在如果是new String("20140719140818");就有问题怎么解决 如果不是new出来的,什么情况会出现问题 public class Test { public static void main(String[] args) { new Thread(){ public void run(){ pay(&quo