/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.jpa.demo;

import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Resource;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Administrator
 */
@WebServlet(name = "QueryServlet", urlPatterns = {"/QueryServlet"})
public class QueryServlet extends HttpServlet {

    @PersistenceContext(unitName = "MyJPADemoPU")
    private EntityManager em;
    @Resource
    private javax.transaction.UserTransaction utx;

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        try {
            //   Query  query = em.createQuery("SELECT c FROM Customer c");
         /*   TypedQuery<Customer> query = em.createQuery("SELECT c FROM Customer c", Customer.class);
             List<Customer> cc = query.getResultList();
             for (int i = 0; i < cc.size(); i++) {
             Customer temp = cc.get(i);
             System.out.print(temp.toString());
             }
             Query query2 = em.createNamedQuery("getCustomer");
             query2.setParameter(1, 51L);
             Customer temp = (Customer) query2.getSingleResult();
             System.out.print(temp.toString());*/

            /*  Query query3 = em.createQuery("select new com.jpa.demo.SimpleCustomer( c.id,c.Name) from Customer c order by c.id desc ");

             List result = query3.getResultList();
             if (result != null) {
             Iterator iterator = result.iterator();
             while (iterator.hasNext()) {
             SimpleCustomer sc = (SimpleCustomer) iterator.next();

             System.out.print(sc);
             }
             }*/
            /* Query query = em.createNativeQuery("SELECT * FROM customer", Customer.class);
             List<Customer> cc = query.getResultList();
             for (int i = 0; i < cc.size(); i++) {
             Customer temp = cc.get(i);
             System.out.print(temp.toString());
             }*/
        /*   CriteriaBuilder builder = em.getCriteriaBuilder();
            CriteriaQuery<Customer> query = builder.createQuery(Customer.class);
            Root<Customer> c = query.from(Customer.class);
            query.select(c).where(builder.greaterThan(c.get(Customer_.id), 100L));
            TypedQuery<Customer> typedQuery = em.createQuery(query);
            List<Customer> cc =  typedQuery.getResultList();
              utx.begin();
             for (int i = 0; i < cc.size(); i++) {
             Customer temp = cc.get(i);
             System.out.print(temp.toString());
           
            em.merge(temp);
           
             }
            utx.commit();*/
          Customer ac=new Customer();
          ac.setEmail("aaa");
          utx.begin();
          em.persist(ac);
          utx.commit();
        } catch (Exception e){
            System.out.println(e.toString());
        }
        finally {
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    public void persist(Object object) {
        try {
            utx.begin();
            em.persist(object);
            utx.commit();
        } catch (Exception e) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", e);
            throw new RuntimeException(e);
        }
    }
}
