【问题标题】:CreateCriteria Contains RestrictionCreateCriteria 包含限制
【发布时间】:2017-08-21 09:54:01
【问题描述】:

我正在使用 Criteria API 进行查询,并希望在包含全文索引的列上进行查询。

但后来在 Criteria API 中我无法成功找到 CONTAINS

有没有办法在 Criteria 中使用CONTAINS?我使用了CreateQuery 并且能够让它工作,但想知道是否有办法使用CreateCriteria 来完成它。

任何指向相同的指针都非常感谢,因为我已经搜索了很长一段时间了。

【问题讨论】:

    标签: hibernate nhibernate criteria hibernate-criteria criteria-api


    【解决方案1】:

    我们可以使用 Criterion.Expresssion.Sql 生成自定义 SQL 部分。 (有一个example how to

    这可能是我们的例子

    var searchedValue = "searched value";
    
    var session = ... // get session 
    
    // dynamic way to construct some SQL part
    var criterion = NHibernate.Criterion.Expression
        .Sql(" CONTAINS ({alias}.LastName, ? ) ",
            new object[] { searchedValue},
            new IType[] { NHibernate.NHibernateUtil.String});
    
    // our criteria
    var criteria = session.CreateCriteria<MyEntity>();
    
    // with our FULLTEXT filter
    criteria.Add(criterion);
    
    // result..
    var list = criteria
        .SetFirstResult(0) // paging
        .SetMaxResults(10)
        .List<MyEntity>();
    

    【讨论】:

    • 还有一个问题。我尝试在一对一映射上应用过滤器。我想要实现的是在拉取对象时添加 where 子句。我添加了一个property-ref,它只是根据该引用提取的,但我希望添加另一个条件。那可能吗 ?我不想用包,因为property-ref + 我的条件会给我一个独特的对象。
    • 那是不同的话题。我建议..接受你的问题的这个答案..并提出新的问题。你肯定(提供足够的细节)得到你的答案
    • {alias} 将是 Hibernate 在我将用来查询的基本模型上设置的别名,对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 2012-04-21
    • 2017-03-23
    相关资源
    最近更新 更多