@Override
 public List<E> selectAll() {
   if (em == null || !em.isOpen()) {
     em = EntityManageFactoryTest.getInstance().getEmf().createEntityManager();
   }
   try {
     return em.createQuery("Select tbl from " + clsName.getSimpleName() + " tbl").getResultList();
   } catch (Exception e) {
     return null;
   }
 }
 @Override
 public E getById(long id) {
   if (em == null || !em.isOpen()) {
     em = EntityManageFactoryTest.getInstance().getEmf().createEntityManager();
   }
   try {
     return (E) em.find(clsName, id);
   } catch (Exception e) {
     return null;
   } finally {
     em.close();
   }
 }
  @Override
  public List<Product> getByCode(String code) {
    String sql = "Select tbl from Product tbl where tbl." + Product.FIELD_CODEPRODUCT + " =?1 ";
    if (em == null || !em.isOpen()) {
      em = EntityManageFactoryTest.getInstance().getEmf().createEntityManager();
    }
    try {

      return em.createQuery(sql).setParameter(1, code).getResultList();
    } catch (Exception e) {
      return null;
    } finally {
      em.close();
    }
  }
 @Override
 public boolean update(E object) {
   if (em == null || !em.isOpen()) {
     em = EntityManageFactoryTest.getInstance().getEmf().createEntityManager();
   }
   try {
     em.getTransaction().begin();
     em.merge(object);
     em.getTransaction().commit();
     return true;
   } catch (Exception e) {
     return false;
   } finally {
     em.close();
   }
 }
  @Override
  public boolean delete(E object) {

    if (em == null || !em.isOpen()) {
      em = EntityManageFactoryTest.getInstance().getEmf().createEntityManager();
    }
    try {

      em.getTransaction().begin();
      em.remove(em.find(clsName, ((IEntity) object).getId()));

      em.getTransaction().commit();
      return true;
    } catch (Exception e) {
      return false;
    } finally {
      em.close();
    }
  }