-
高手请进--hibernate 子查询,折磨我好几天了30
我有个表用来存储论坛的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);
请兄弟指教。马上给分。
2008年5月28日 09:22
2个答案 按时间排序 按投票排序
-
采纳的答案
Criterion criterion4Topic = Restrictions.or(
Restrictions.and(
Restrictions.eq("id",this.getTopicId()),
Restrictions.eq("randomCode",this.getRandomCode())
),
Restrictions.eq("repliedTopic.id",this.getTopicId())
)2008年5月28日 13:14
-
select topic,relies from TopicOrReplies as relies join relies.repliedTopic as topic where topic.id=?
这样可以使topic,replies分离,在程序中比较好控制。也可以对replies进行想要的排序2008年5月28日 13:24
相关推荐
达梦数据DmDialect-for-hibernate所有jar包,DmDialect-for-hibernate2.0、DmDialect-for-hibernate2.1、DmDialect-for-hibernate3.0、DmDialect-for-hibernate3.1、DmDialect-for-hibernate3.6、DmDialect-for-...
国产达梦数据库hibernate方言包
xjar-agent-hibernate-v1.0.0.jar下载
【标题】"Middlegen-Hibernate-r5,hibernate-extensions-2.1.3" 涉及的是两个重要的Hibernate相关工具:Middlegen和Hibernate Extensions,这两个工具都是在开发基于Java的数据库应用程序时使用的辅助工具。...
在使用Hibernate进行数据查询时,有时会遇到需要使用子查询的情况。然而,正如你所描述的,Hibernate的HQL(Hibernate Query Language)并不直接支持在`FROM`子句后跟一个子查询,这与标准的SQL语法有所差异。在HQL...
2. **库文件**:包含jar包,如hibernate-core.jar、hibernate-entitymanager.jar等,这些是我们在项目中引入Hibernate时需要用到的依赖库。 3. **文档**:通常包括用户指南、API文档、开发者文档等,这些文档提供了...
/*************************************** * 达梦8 JDBC驱动版本说明 /*************************************** ...8. DmDialect-for-hibernate5.3.jar 对应 Jdk1.7及以上, hibernate5.3 -- 5.4 环境
struts-spring-hibernate-_-integration-2.zip
struts-sprint-hibernate 开发案例介绍 介绍了struts-sprint-hibernate 模式的开发流程
DmDialect-for-hibernate2.0、DmDialect-for-hibernate2.1、DmDialect-for-hibernate3.0、DmDialect-for-hibernate3.1、DmDialect-for-hibernate3.6、DmDialect-for-hibernate4.0、DmDialect-for-hibernate5.0、...
《DmDialect-for-hibernate5.6:深入理解DM数据库方言在Hibernate 5.6中的应用》 在Java企业级开发中,持久层框架Hibernate是不可或缺的一部分,它提供了对象关系映射(ORM)功能,使得开发者可以使用面向对象的...
赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...
hibernate-3.2.0源码和hibernate-3.2.0所有的jar包。
Java J2EE Hibernate Struts Spring Hibernate Together
很多人为了配置jpa找这个动态产生字节码的jar文件,hibernate-distribution-3.3.1.GA包太大,而hibernate-distribution-3.3.2.GA的jar没有这个jar文件,希望对大家有用
spring-boot-hibernate5 整合源码
hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.1.12.Final.jar hibernate-ehcache-4.1.12.Final.jar hibernate-entitymanager-4.1.12.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar ...
hibernate2的核心jar包 hibernate2.jar
Java-Spring+Struts+Hibernate-SSH框架整合01-Spring+Hibernate(一步一步的教你敲代码)(博客园,博客名称:Java-Spring+Struts+Hibernate-SSH框架整合01-Spring+Hibernate)