我正在开发一个经常使用 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);
换句话说,CriteriaBuilder
和CriteriaQuery
必须以不同的方式实例化才能使构建正常工作。例如。整体CriteriaQuery<Entity class>
语法对我来说没有意义。
最佳答案
您似乎获取了错误的 API 文档,正确的文档是 this 。 Coalesce 方法(如 SQL pendant )仅返回第一个非空值,因此如果该值不为空,则返回 adjustmentWeight 的值,否则返回weight 的值,或者如果没有任何值存在,则至少为 null。
您的情况中的 root
变量仅代表您正在处理的表,分别代表查询的根(SQL 查询翻译将是 ... FROM ...
)。名字是任意的。 As database term this would be the selection 。 This article也可以帮助你。
关于java - 设置 CriteriaBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43816159/