今天使用Example查询,结果发现设置的条件无效.
查询代码:
/*** * * @param obj * @param includeZeros * @return */ private Criteria getCriteria( Object obj, boolean includeZeros) { if (obj == null) { return this.sessionFactory.getCurrentSession().createCriteria(clz); } else { Example example = Example.create(obj); if (!includeZeros) { example = example.excludeZeroes(); } Criteria criteria = this.sessionFactory.getCurrentSession() .createCriteria(clz); criteria.add(example); return criteria; } }
测试
OrdersDao OrdersDao=(OrdersDao)ctx.getBean("ordersDao"); Orders orders=new Orders(); orders.setBarCode("00001925"); List list=new ArrayList(); // long count=osTypeDao.listByPage(osType, false, list, 0, 5); long count=ordersDao.listByPage(orders, false, list, 0, 5); System.out.println("count:"+count);
但是执行时,发现where后面是1=1,即设置的查询条件(orders.setBarCode("00001925"))没有起作用.
非常奇怪,刚开始使用的sqlserver2000数据库,我以为是sqlserver2000的问题,所以我换成了mysql,但是发现mysql依然如故.所以确定不是数据库的问题./
可能是代码的问题
Orders 结构如下:
/*** * Note:不允许修改表结构<br />table:orders<br /> * 订单类 * @author huangwei * @since 2014-09-02 */ @Entity @Table(name = "orders") public class Orders { /*** * 条码,订单号 */ private String barCode; /*** * 本订单返工次数,新单为0,返工累加∑1-n */ private int serial; /*** * 条码,订单号 * @return */ @Id @Column(name="Order_ID",unique=true) public String getBarCode() { return barCode; } public void setBarCode(String barCode) { this.barCode = barCode; } }
后来发现突然发现其他字段没问题,那么barCode有什么特殊的地方吗?
再一看表,原来它是主键.
相关推荐
`Example`查询主要依赖于`org.hibernate.criterion.Example`类,它允许你基于一个实例对象创建查询条件,从而检索出数据库中所有符合该实例属性的对象。下面通过具体的代码示例来说明`Example`的基本使用: ```java...
这里,`Example.create(s)`会根据`s`对象的属性生成查询条件,查询所有`giftortoy`字段为"2"的学生对象。 2. Query By Criteria (QBC) QBC是Criteria API的核心,它使用`Criteria`、`Criterion`、`Order`和`...
2. **Criterion**:`org.hibernate.criterion.Criterion` 接口定义了一个查询标准,用于表示查询条件。 3. **Restrictions**:`org.hibernate.criterion.Restrictions` 类提供了一系列静态工厂方法,用于创建 ...
QBC是一种更灵活的查询方式,它使用`Criteria`、`Criterion`、`Order`和`Restrictions`等类构建查询条件。例如,可以使用`session.createCriteria(JdItemSerialnumber.class)`创建一个查询,然后添加条件`...
例如,创建一个 Criteria 实例 org.hibernate.Criteria 接口表示,可以使用 Criteria 的 add(Criterion criterion) 方法来添加查询条件。Criterion 可以使用 Restrictions 工具类来创建,例如使用 eq、ge、between ...
使用 Criteria 进行查询,主要要清晰的是 Hibernate 提供了那些类和方法来满足开发中查询条件的创建和组装。Criteria crit = session.createCriteria(User.class); crit.add(Restrictions.eq("name", "John")); List...
**Example** 是一种特殊类型的Criterion,它基于一个实体对象创建查询条件。你可以忽略大小写,设置模糊匹配等,使得查询更加灵活。 **Projection** 是用于报表查询和聚合操作的接口。它定义了如何从数据库中提取...
Hibernate 中 Criteria 的使用 Hibernate 中 Criteria 的使用是 ...Hibernate 中 Criteria 的使用可以灵活地根据查询条件的组装来进行查询,使用 Criterion 和 Projection 设置查询条件,可以实现复杂的查询操作。
- **Example**:一种特殊的`Criterion`,允许通过实体对象实例化,实现基于对象的查询。支持忽略大小写、模糊匹配等特性。 - **Projection**:用于聚合查询和分组,例如计算平均值、最大值等。`Projections`类提供...
Example exampleUser = Example.create(u).ignoreCase().enableLike(MatchMode.ANYWHERE); ``` Projection接口用于处理查询结果,比如计算平均值、计数、最大值、最小值和求和。SimpleProjection和ProjectionList...
如使用 `session.createCriteria(Class)` 方法来创建 Criteria 实例,然后使用 `add(Criterion criterion)` 方法来添加查询条件,最后使用 `list()` 方法来获取查询结果。 Hibernate 的 Criteria 和 ...
在上面的代码中,我们首先创建了一个 Criteria 对象,然后使用 `Example.create(s)` 方法创建了一个示例对象,最后使用 `list()` 方法来获取查询结果。 QBC(Query By Criteria) QBC 是一种基于条件的查询机制,...
通过Example.create()方法,你可以忽略大小写,启用模糊匹配等,这在处理基于对象属性的查询时非常有用。 Projection接口用于查询结果的投影,即指定查询返回的字段。SimpleProjection如avg(), count(), max(), min...
在Java的持久层框架Hibernate中,Criteria API是一个强大的查询工具,它可以用来替代传统的SQL或HQL(Hibernate Query Language)查询,以实现更加面向对象的数据库交互。Criteria API的设计旨在屏蔽不同数据库之间...
- **灵活性**:两者均提供了高度的灵活性,可以使用`Criterion`和`Projection`来设置查询条件和投影结果,但`DetachedCriteria`的离线特性使其在某些场景下更加灵活。 #### Criterion与Projection详解 - **...