`

CreateAlias 与 CreateCriteria的区别

 
阅读更多

NHibernate.Criterion方法解释

 

HQL运算符

QBC运算符

含义

=

Restrictions.eq()

等于equal

<>

Restrictions.ne()

不等于not equal

>

Restrictions.gt()

大于greater than

>=

Restrictions.ge()

大于等于greater than or equal

<

Restrictions.lt()

小于less than

<=

Restrictions.le()

小于等于less than or equal

is null

Restrictions.isnull()

等于空值

is not null

Restrictions.isNotNull()

非空值

like

Restrictions.like()

字符串模式匹配

and

Restrictions.and()

逻辑与

and

Restrictions.conjunction()

逻辑与

or

Restrictions.or()

逻辑或

or

Restrictions.disjunction()

逻辑或

not

Restrictions.not()

逻辑非

in(列表)

Restrictions.in()

等于列表中的某一个值

not in(列表)

Restrictions.not(Restrictions.in())

不等于列表中任意一个值

between x and y

Restrictions.between()

闭区间xy中的任意值

not between x and y

Restrictions.not(Restrictions..between())

小于值X或者大于值y

 

 

ICriteria criteria = this.Session.CreateCriteria<CpCourse>()

               .CreateAlias(CpCourse._Organizations, "o")//表示CoOrganization实体和CpCourse实体做关联

               //.Add(Expression.Eq("o." + CoOrganization._Address, "456"));//可以根据别名再配置条件,该条件也可以写在

               下面任意位置

               .GetCriteriaByAlias("o")//表示跳到CoOrganization实体,如果不写表示还在CpCourse实体             

               .CreateAlias(CoOrganization._Users, "u")//表示CoUser实体和CoOrganization实体进行关联

               .Add(Expression.Eq("u." + CoUser._UserName, "zhuangyq"));

               //.Add(Expression.Eq("o." + CoOrganization._Address, "456"));//如这个位置

               IList<CpCourse> list = criteria.List<CpCourse>();

 

               以下结果集同上面写法

 

               ICriteria criteria = this.Session.CreateCriteria<CpCourse>()

               .CreateCriteria(CpCourse._Organizations)//表示到达CoOrganization实体,与CpCourse实体关联

               //.Add(Expression.Eq(CoOrganization._Address, "456"))//条件必须紧跟CoOrganization实体后面

               .CreateCriteria(CoOrganization._Users)//表示到达CoUser实体,与CoOrganization实体关联

               .Add(Expression.Eq(CoUser._UserName, "zhuangyq"));"))//条件必须紧跟CoUser实体后面

                IList<CpCourse> list = criteria.List<CpCourse>();

 

CreateCriteria表示到达该实体,再与.CreateAlias或.CreateCriteria的后面的实体与该实体进行关联。

关于CreateCriteria实体的条件必须紧跟CreateCriteria的实体其后。

CreateAlias创建表别名的方式,只要在这个表的别名创建之后都可以再进行条件的添加(条件必须包含别名)

或者使用GetCriteriaByAlias方法达到该包含别名的实体后继续操作再进行.CreateAlias或.CreateCriteria。

 

在NHibernate里面查很常用。CreateAlias 返回值还是当前的Criteria,但是CreateCriteria返回的新的Criteria。

 

Main

 

基本用法 如下。

var cri = session.CreateCrieria(typeof(User)) 
       .CreateCriteria("Roles") 
       .Add(Restrictions.Eq("RoleName","admin");


var cri = session.CreateCrieria(typeof(User)) 
       .CreateAlias("Roles","role") 
       .Add(Restrictions.Eq("role.RoleName","admin");
 
现在我除了想查role是admin的用户外,也想查出UserName名字叫做Joe的用户,那么他们就有区别
 
var cri = session.CreateCrieria(typeof(User))
       .Add(Restrictions.Eq("UserName", "Joe")
       .CreateCriteria("Roles") 
       .Add(Restrictions.Eq("RoleName","admin");

//第一种写法
var cri = session.CreateCrieria(typeof(User))
       .Add(Restrictions.Eq("UserName", "Joe") //紧贴着User
       .CreateAlias("Roles","role") 
       .Add(Restrictions.Eq("role.RoleName","admin"); 
//第二种写法。
var cri = session.CreateCrieria(typeof(User))
       .CreateAlias("Roles","role") 
       .Add(Restrictions.Eq("role.RoleName","admin");
       .Add(Restrictions.Eq("UserName", "Joe") //前后都没有关系,贴着role也可以。


根据ayende 说,是生成的sql效率是一样的,不过原来的blog已经找不到了。
分享到:
评论

相关推荐

    Criteria用法

    - `createAlias()`方法用于创建关联查询,例如:`Criteria crt = session.createCriteria(HistoryExam.class).createAlias("user","userAlias").add(Restrictions.like("userAlias.id", userid));`这将`HistoryExam...

    hibernate分页

    2. **使用Criteria的createAlias和createCriteria方法**:如果查询涉及多个表,可以使用`createAlias`和`createCriteria`来创建关联,并在这些关联上添加分页条件。 ### 三、Query API 分页 1. **使用...

    Hibernate深入研究之Criteria.rar

    1. **Criteria接口**:是Criteria API的主要入口,提供了创建查询的基本构造方法,如`add()`用于添加限制条件,`setResultTransformer()`用于结果转换,`createAlias()`和`createCriteria()`用于关联查询。...

    Hibernate-Criteria 模糊查询

    分页与排序 在进行模糊查询时,常常还需要考虑分页和排序的需求。这些都可以通过`setFirstResult()`、`setMaxResults()`以及`addOrder()`等方法来实现。 ```java // 实现分页和排序 Criteria criteria = session....

    QBC的各种查询

    4. **分组查询**:Criteria的createCriteria(String associationPath)方法可以用于创建子查询,配合setProjection(Projections projections)进行分组,Projections提供了groupProperty()方法用于按属性分组。...

    Hibernate Criteria用法大全.docx

    通过`createCriteria()`或`createAlias()`方法处理一对多、一对一或多对多关系,例如: ```java criteria.createCriteria("relatedEntity", "alias", JoinType.INNER_JOIN); ``` 7. **动态关联抓取** 使用`...

    Hibernate中,利用Criteria查询容器实现sql的写法

    2. 添加查询条件:Criteria API提供了多种方法来添加查询条件,如add(Restriction restriction)用于添加限制条件,addOrder(Order order)用于排序,createAlias(String associationPath, String alias)用于关联查询...

    Hibernate中Criteria的完整用法.docx

    crit.createAlias("orderItems", "oi"); crit.add(Restrictions.eq("oi.product.name", "Apple")); crit.setProjection(Projections.sum("oi.quantity")); // 计算总数量 List&lt;Integer&gt; totalQuantities = crit.list...

    struts+hibernate+jdbc双表查询

    Criteria criteria = session.createCriteria(User.class); criteria.createAlias("orders", "o"); List&lt;User&gt; users = criteria.list(); session.close(); return users; // 或者使用JDBC String sql = ...

    hibernateCriteria的使用.docx

    Criteria API还提供了其他功能,如限制结果集大小(`setMaxResults()`),按特定顺序排序(`addOrder(Order)`),以及添加多个查询条件(`createCriteria()`和`createAlias()`)。 总结来说,Hibernate Criteria ...

    Hibernat 使用Criteria查询多对多关系(SET集合)条件

    List&lt;MainClass&gt; results = (List) session.createCriteria(MainClass.class) .add(criteria) // 添加之前定义的查询条件 .list(); // 执行查询 ``` #### 注意事项 1. **集合填充问题:** 当查询结果返回后,每...

    hibernate 进行多表查询每个表中各取几个字段

    Criteria criteria = session.createCriteria(User.class, "u") .createAlias("u.address", "a") .setProjection(Projections.projectionList() .add(Projections.property("u.id").as("userId")) .add...

    Hibernate数据查询

    在映射文件中定义了实体间的关联关系后,可以通过JOIN关键字进行联查,或者在Criteria API中使用CreateCriteria或CreateAlias方法实现。 3. **分页查询** 在大数据量的场景下,分页查询是必不可少的。Hibernate ...

    day36 04-Hibernate检索方式:多表连接查询

    Hibernate是一个流行的Java持久化框架,它简化了Java应用程序与数据库之间的交互。通过使用ORM,开发者可以将数据库操作转化为对Java对象的操作,使得代码更加简洁且易于维护。在多表连接查询的场景下,Hibernate...

    \Hibernate_query条件查询

    criteria.createAlias("addresses", "addr"); // 添加别名 criteria.add(Restrictions.gt("age", 30)); ``` 8. **子查询** Hibernate允许在查询中嵌套其他查询,增强查询表达能力: ```java // HQL String ...

    Criteria hibernate

    这种API的主要优点在于它的灵活性和可扩展性,可以方便地与业务逻辑相结合,减少代码重复,并且对ORM(对象关系映射)的理解要求较低。 博文链接:[https://ssydxa219.iteye.com/blog/1543253]...

    hibernatemanytomany:使用两个实体的投影Hibernate多对多示例

    B 参加的会议 A 参加的另一个会议 B 只有 B 参加的会议1, 1 2, 1 1, 2 2, 3 现在我们想要一个扁平化的名字列表,会议主题标准标准 = session.createCriteria(Employee.class, "e"); 标准.setFetchMode("e.meetings",...

    Hibernate过滤

    Criteria criteria = session.createCriteria(EntityA.class); criteria.createAlias("entityB", "b"); criteria.add(Restrictions.eq("property", value)); List&lt;EntityA&gt; entities = criteria.list(); ``` 以上...

    Hibernate的Criteria 查询方法

    此外,还可以通过 `createAlias()` 方法来处理多对多或一对多关系中的中间表。 总的来说,Hibernate的Criteria查询提供了灵活性和便利性,使得在程序中动态构造查询成为可能,同时保持了代码的清晰和可读性。它是...

    hibernate5--4.检索方式及策略

    ` 创建一个User类的查询实例,然后可以通过addRestrictions、createAlias等方法添加条件。 3. **Query API(JPA 2.1 引入)**: 与HQL类似,但更加面向方法,提供了一个强大的API来创建查询。例如,`Query query = ...

Global site tag (gtag.js) - Google Analytics