java - 设置 CriteriaBuilder

标签 java sql hibernate jpa criteria-api

我正在开发一个经常使用 CriteriaBuilder.Coalesce 的大型代码库。和 Root 。例如,

criteriaBuilder.coalesce(root.get('adjustedWeight'), root.get('weight'))

我不明白这个语法。其一,Coalesce API似乎只接受 1 个 Expression<? extends T> 类型的参数或T 。我也不明白 Root 是什么或者它为什么有用。

为了帮助我理解,我正在创建一个简化的示例,该示例使用上面的代码行以及 CriteriaBuilder 和 Root。我已经成功连接 Hibernate 和 JPA。

请记住,我有大约 3 天的 Java 编程经验。我的母语是 C#

import models.MyEntity;
import org.hibernate.jpa.HibernatePersistenceProvider;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.spi.PersistenceProvider;
import java.util.HashMap;
import java.util.List;


public class Main {
    public static final String SELECT_QUERY = "from MyEntity where title = :title";

    public static void main(String[] args) {
            String title = "secureexam";
            PersistenceProvider persistenceProvider = new HibernatePersistenceProvider();
            EntityManagerFactory entityManagerFactory = persistenceProvider
                    .createEntityManagerFactory("NewPersistenceUnit", new HashMap());
            EntityManager entityManager = entityManagerFactory.createEntityManager();
            List<MyEntity> result = entityManager
                    .createQuery(SELECT_QUERY, MyEntity.class)
                    .setParameter("title", title)
                    .getResultList();

            System.out.println("result is " + result.get(0).getTitle());
            entityManager.close();
    }
}

您能向我解释一下有关 criteriaBuilder 的第一行代码吗?另外,我如何修改我的代码以使用这行代码?

更新

凯文·彼得斯回答中提到的文章稍作修改即可:

    CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
    CriteriaQuery<Entity> criteriaQuery = criteriaBuilder.createQuery(Entity.class);

//Test 1
Root<AssessmentEntity> rootTest1 = criteriaQuery.from(Entity.class);

换句话说,CriteriaBuilderCriteriaQuery必须以不同的方式实例化才能使构建正常工作。例如。整体CriteriaQuery<Entity class>语法对我来说没有意义。

最佳答案

您似乎获取了错误的 API 文档,正确的文档是 this 。 Coalesce 方法(如 SQL pendant )仅返回第一个非空值,因此如果该值不为空,则返回 adjustmentWeight 的值,否则返回weight 的值,或者如果没有任何值存在,则至少为 null。

您的情况中的 root 变量仅代表您正在处理的表,分别代表查询的根(SQL 查询翻译将是 ... FROM ... )。名字是任意的。 As database term this would be the selectionThis article也可以帮助你。

关于java - 设置 CriteriaBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43816159/

相关文章:

java - java中线程间的数据通信

java - 是否可以只下载页面的 HEAD 标签?

java - 在 swing 中显示 HTML5

sql - 使用 DB2 SQL,对于不属于 where 子句的条件,如何避免返回不是最新的行?

java - hibernate persist 尝试使用现有 id 创建对象失败

java - 创建名称为 'Individual_Controller' : Injection of autowired dependencies failed; 的 bean 时出错

java - 安装 Apache Maven

mysql - 查询月份等于的数据库

mysql - 根据相关表中的最大值更新记录

java - 如何找到死锁的两个线程?