Hi,
i am having problems running following code...
import java.util.*; import javax.persistence.*; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.ParameterExpression; import javax.persistence.criteria.Root; public final class MyTestCase { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("objectdb:$objectdb/db/test.tmp;drop"); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); for (double i=0.0; i<10.0;i++){ em.persist(new DataObject(i)); } em.getTransaction().commit(); CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<DataObject> q = cb.createQuery(DataObject.class); Root<DataObject> d = q.from(DataObject.class); q.select(d); ParameterExpression<Double> p1 = cb.parameter(Double.class); ParameterExpression<Double> p2 = cb.parameter(Double.class); q.where( cb.and( cb.gt(d.get("lon"),p1), cb.lt(d.get("lon"),p2) ) ); TypedQuery<DataObject> query = em.createQuery(q); query.setParameter(p1, 100.0); query.setParameter(p2, 150.0); List resultList = query.getResultList(); System.out.println(resultList); em.close(); emf.close(); } @Entity public static class DataObject { private double lon; DataObject(Double lon) { this.lon = lon; } public String toString (){ return String.valueOf(this.lon); } } }
I my eyes it is exactly the same as you did in your manual. But running this gets me following error message:
Exception in thread "main" java.lang.Error: Unresolved compilation problems: The method gt(Expression<? extends Number>, Expression<? extends Number>) in the type CriteriaBuilder is not applicable for the arguments (Path<Object>, ParameterExpression<Double>) The method lt(Expression<? extends Number>, Expression<? extends Number>) in the type CriteriaBuilder is not applicable for the arguments (Path<Object>, ParameterExpression<Double>) at MyTestCase.main(MyTestCase.java:30)
Please help...