【问题标题】:Replicate a behavior of criteria to criteriaBuilder将条件的行为复制到条件构建器
【发布时间】:2021-10-09 15:08:27
【问题描述】:

由于criteria 在最新版本的hibernate 中已被弃用,我正在尝试通过以下方式将所有内容迁移到criteriaBuilder

javax.persistence.criteria.CriteriaBuilder
javax.persistence.criteria.CriteriaQuery

// Create CriteriaBuilder
CriteriaBuilder builder = session.getCriteriaBuilder();

// Create CriteriaQuery
CriteriaQuery<MyClass> criteria = builder.createQuery(MyClass.class);

当我尝试复制以下行为时,我的问题出现了:

session.createCriteria(MyClass.class).add(Restrictions.sqlRestriction("MyConditions"));

那么如何使用CriteriaBuilder / CriteriaQuery 通过字符串设置条件? (从而复制Restrictions.sqlRestriction() 的行为)。

【问题讨论】:

    标签: java hibernate hibernate-criteria


    【解决方案1】:

    这是不可能的,除非您深入了解 Hibernate 并创建一个自定义 SQLFunction,它只是将您作为字符串文字传递给查询的 SQL 呈现。您必须使用 JPA Criteria API 并创建正确的谓词。

    【讨论】:

      【解决方案2】:

      类似:

      Root<Item> root = criteria.from(MyClass.class);
      criteria.select(root).where(Restrictions.sqlRestriction("MyConditions"));
      

      【讨论】:

      • 抛出错误:java.lang.ClassCastException: class org.hibernate.criterion.SQLCriterion cannot be cast to class javax.persistence.criteria.Expression (org.hibernate.criterion.SQLCriterion and javax.persistence.criteria.Expression are in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @2f48b3d2)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 2016-07-06
      • 2017-07-06
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多