我正在研究一個經常使用CriteriaBuilder.Coalesce和Root的大代碼庫。例如,設置CriteriaBuilder
criteriaBuilder.coalesce(root.get('adjustedWeight'), root.get('weight'))
我不明白這句法。舉例來說,Coalesce API似乎只接受1個類型爲Expression<? extends T>
或T
的參數。我也不明白根是什麼或爲什麼它是有用的。
爲了幫助我理解,我使用CriteriaBuilder和Root創建了一個使用上面代碼行的簡化示例。我成功地連接了Hibernate和JPA。
請記住我有3天的Java編程經驗。我的家鄉是langugage 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?另外,如何修改我的代碼以使用這一行代碼?
UPDATE
凱文·彼得斯的回答中提到的文章稍作修改工作:
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>
語法對我來說沒有意義。