Здесь выложу примеры использования Criteria API и JPQL. Часть кода закомментирована.
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package jpa;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Join;
import javax.persistence.criteria.ParameterExpression;
import javax.persistence.criteria.Root;
/**
*
* @author martyshov
*/
@Stateless
public class MainBean {
// Add business logic below. (Right-click in editor and choose
// "Insert Code > Add Business Method")
@PersistenceContext
EntityManager em;
/**
*
* @return
*/
public List getCustomerList() {
//Query q = em.createQuery("select c from Customer c join c.zip z where z.radius > 500 and z.radius < 700");
// Query q = em.createQuery("select c from Customer c, c.zip z where z.radius > 500");
//Query q = em.createQuery("select c from Customer c inner join c.zip z");
//Query q = em.createQuery("select distinct c from Customer c where exists (select o.customerId from PurchaseOrder o where o.customerId = c)");
//Query q = em.createQuery("select distinct c from Customer c where LOCATE('ers', c.name) > 0");
//Query q = em.createQuery("select c from Customer c, IN(c.zip) z"); - ошибка
//q.setParameter(1, "%Val%");
//q.setParameter(2, "%Mar%");
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery query = builder.createQuery(Customer.class);
Root root = query.from(Customer.class);
query.select(root);
//Join join = root.join(Customer_.purchaseOrderCollection);
//query.where(builder.like(root.get(Customer_.name), "%Mart%"));
//builder.between(root.get(Customer_.customerId), 100, 900);
//query.where(builder.or(builder.between(root.get(Customer_.customerId), 100, 900), builder.equal(root.get(Customer_.customerId), 6347))) ;
query.where(builder.lt(root.get(Customer_.customerId), 500));
query.orderBy(builder.asc(root.get(Customer_.name)));
//query.where(builder.or(builder.between(root.get(Customer_.customerId), 100, 900)), builder.equal(root.get(Customer_.customerId), 6347)) ;
//query.where(builder.between(root.get(Customer_.customerId), 100, 900));
//builder.and(builder.equal(root.get(Customer_.customerId), 6347));
//query.where(builder.and(builder.equal(root.get(Customer_.customerId), 6347)));
TypedQuery typed_query = em.createQuery(query);
return typed_query.getResultList();
}
public List getCustomerList2() {
//Query q = em.createQuery("select c from Customer c join c.zip z where z.radius > 500 and z.radius < 700");
// Query q = em.createQuery("select c from Customer c, c.zip z where z.radius > 500");
//Query q = em.createQuery("select c from Customer c inner join c.zip z");
//Query q = em.createQuery("select distinct c from Customer c where exists (select o.customerId from PurchaseOrder o where o.customerId = c)");
//Query q = em.createQuery("select distinct c from Customer c where LOCATE('ers', c.name) > 0");
//Query q = em.createQuery("select c from Customer c, IN(c.zip) z"); - ошибка
//q.setParameter(1, "%Val%");
//q.setParameter(2, "%Mar%");
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery query = builder.createQuery(String.class);
Root root = query.from(Customer.class);
query.select(builder.concat(root.get(Customer_.name), root.get(Customer_.phone)));
query.where(builder.or(builder.between(root.get(Customer_.customerId), 100, 900), builder.equal(root.get(Customer_.customerId), 6347)));
query.orderBy(builder.desc(root.get(Customer_.name)), builder.asc(root.get(Customer_.fax)), builder.desc(root.get(Customer_.phone)));
TypedQuery typed_query = em.createQuery(query);
return typed_query.getResultList();
}
public List getCustomerList3() {
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery query = builder.createQuery(String.class);
Root root = query.from(Customer.class);
query.select(builder.concat(root.get(Customer_.name), root.get(Customer_.phone)));
query.where(builder.gt(root.get(Customer_.customerId), 400));
//query.where(builder.equal(root.get("name"), "Wren Computers"));
//query.where(builder.isNotNull(root.get("name")));
//query.where(builder.like(root.get(Customer_.name), "%Mar%"));
query.where(builder.lt(root.get("customerId"), 500));
TypedQuery typed_query = em.createQuery(query);
return typed_query.getResultList();
}
public List getMicroMarketList() {
Query q = em.createQuery("select m from MicroMarket m");
//Query q = em.createQuery("select m from MicroMarket m where m.zipCode not in (select c.zip from Customer c)");
return q.getResultList();
}
public Integer getCountCustomer() {
Query q = em.createQuery("select COUNT(c) from Customer c");
List arr = q.getResultList();
return arr.get(0);
}
public String doUpdateData() {
Query q = em.createQuery("update Customer c set c.phone = '88888-99999' where c.customerId in (2, 3, 106)");
q.executeUpdate();
return null;
}
public String doDeleteData() {
Query q = em.createQuery("delete from Customer c where c.customerId = 2494");
q.executeUpdate();
return null;
}
}
|