有一个主表,其中一个字段是从表对应的记录数,为了避免在查询时把从表的记录全部查询出来,不使用one-to-many关联,有一种方法就是通过formula来实现。
从表Mapping文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.huatek.hbwebsite.common.entity"> <class name="HousePic" table="house_picture"> <id name="erpId" type="java.lang.String" column="erp_id"></id> <property name="houseId" column="house_id" type="java.lang.String"/> <property name="houseType" column="house_type" type="java.lang.Integer"/> <property name="picType" column="picture_type" type="java.lang.Integer"/> <property name="picComment" column="picture_comment" type="java.lang.String" length="1000"/> <property name="picUrl" column="picture_uri" type="java.lang.String" length="500"/> 其他省略. </class> </hibernate-mapping>
主表Mapping文件:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.huatek.hbwebsite.common.entity"> <class name="com.huatek.hbwebsite.common.entity.Community" table="house_community"> <id name="erpId" type="java.lang.String" column="erp_id" length="40"></id> <property name="pictureCount" type="java.lang.Integer" length="11" formula="(select count(*) from house_picture pic where pic.house_id=erp_id and pic.house_type=3)"></property> </class> </hibernate-mapping>
相关推荐
在本系统中,Hibernate负责将Java对象与Oracle 10g数据库中的表进行绑定,使得开发者无需关注SQL语句,即可实现数据的增删改查,提高了开发效率。 Oracle 10g是Oracle公司推出的数据库管理系统,以其强大的性能和...
基于这两个参数,我们可以计算出查询时应从哪一条记录开始以及需要查询多少条记录。 #### 三、Hibernate 分页查询实现步骤 ##### 3.1 创建Session实例 在Hibernate中,所有的持久化操作都需要在一个`Session`实例...
3. **totalRows**: 总记录数,即数据库表中所有记录的数量。 4. **totalPages**: 总页数,根据总记录数和每页记录数计算得出。 ##### 1. 分页计算公式 - **每页开始的索引数**: `(currentPage - 1) * perPageRows`...
Hibernate是Java环境下一个开放源代码的对象关系映射(ORM)框架,它允许开发者将Java对象映射到关系型数据库中的表,以及从数据库表中映射到Java对象。分页功能则是为了提高应用程序性能而设计的一种技术,尤其是在...
1. **对象关系映射(ORM)**:ORM是Hibernate的核心功能,它通过映射XML配置文件或注解,将Java对象与数据库表进行对应,实现了程序中的对象和数据库记录之间的自动转换。 2. **实体类和持久化**:在Hibernate中,...
在SQL中,我们可以使用LIMIT和OFFSET子句来限制返回的记录数,OFFSET表示从哪一条记录开始,LIMIT表示返回多少条记录。在Hibernate中,这可以通过设置Query的setFirstResult和setMaxResults方法来实现,这两个方法的...
// 计算总记录数,这里假设只有一种情况,没有缓存总记录数 Criteria countCriteria = session.createCriteria(User.class).setProjection(Projections.rowCount()); int totalRecords = ((Number) countCriteria...
3. **Count查询**:如果需要显示总记录数,可以先进行一次Count查询,但要注意避免全表扫描,可以使用`Criteria.setProjection(Projections.rowCount())`。 4. **懒加载**:对于关联的对象,可以采用懒加载策略,...
HQL是Hibernate提供的SQL的面向对象版本,用于查询对象而非表。在实现翻页功能时,HQL可以帮助我们更方便地进行复杂的数据查询。 1. **理解HQL**: HQL允许开发者以类和对象的方式编写查询语句,它支持SELECT、...
例如,如果你需要根据用户的年龄进行分组并计算每个年龄段的用户数量,可以这样写: ```java String hql = "select age, count(*) from User group by age"; List[]> result = session.createQuery(hql).list(); ``...
商品表存储商品信息,购物车表记录每个用户的购物车内容,订单表保存用户的订单详情,包括购买的商品、数量、价格等。 6. 安全与优化:为了保证系统安全,需要考虑防止SQL注入、XSS攻击等,同时优化数据库查询以...
2. **业务逻辑层**:处理实际的业务规则和计算,它会调用数据持久层来处理数据。 3. **数据持久层**:与数据库直接交互,负责数据的保存、更新、删除、加载和查询等操作。 【持久化】在软件开发中,是指将数据长期...
// 计算总记录数 Long totalCount = getCount(session, hql, params); // 分页查询数据 List<T> records = getSession().createQuery(hql, T.class) .setParameters(params) .setFirstResult(pageNo * ...
5. 总页数:根据总记录数和每页大小计算得出的页码总数。 `tag.tld`文件是Tomcat服务器下的JSTL标签库描述文件,它定义了一些常用的JSP标签,例如用于在JSP页面中处理分页的`<c:forEach>`和`fmt:formatNumber`等。...
2. 计算总页数,通过总记录数除以每页记录数得到,如果有余数,则页数加一。 3. 将查询结果和分页信息(当前页、总页数)保存到`ActionContext`或`HttpServletRequest`的属性中,以便在JSP中使用。 在模型(Model)...
- 主键是数据库表中唯一标识记录的字段,Hibernate提供了多种主键生成策略,如`increment`、`identity`、`sequence`等。 4. **核心开发接口** - Hibernate的核心接口包括`Session`、`SessionFactory`、`...
在Hibernate中,`Criteria` API的`Projection`子类可以用于统计,如`CountProjection`可以计算记录数。而`HQL`则可以直接使用`select count(*) from Entity`获取总数。 总的来说,Hibernate的`Criteria`、`Query`...
5. 分页功能:提供pagedQuery()方法,除了获取分页结果外,还会计算总记录数,以满足显示分页信息的需求。 第二层是HibernateEntityDao,它继承自HibernateGenericDao,进一步抽象了DAO层。通过使用泛型,可以直接...
// 计算年龄字段不为空且不重复的记录数量 List<Long> countDistinctAge = criteria.list(); ``` - **最大值(Max)**: ```java Criteria criteria = session.createCriteria(User.class); criteria....