0

I'm getting the following exception.

HTTP Status 500 - Request processing failed; nested exception is java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigInteger

with the following code

Emploee.Contoller.java

@RequestMapping("searchEmployee")
    public ModelAndView searchEmployee(@RequestParam("searchName") String searchName) {  
        logger.info("Searching the Employee. Employee Names: "+searchName);
        List<Employee> employeeList = employeeService.getAllEmployees(searchName);
        return new ModelAndView("employeeList", "employeeList", employeeList);      
    }

EmployeeDAOImpl.java

@Override
    public List<Employee> getAllEmployees(String employeeName) { 
        String query = "SELECT e.* FROM Employees e WHERE e.name like '%"+ employeeName +"%'";
        List<Object[]> employeeObjects = hibernateUtil.fetchAll(query);
        List<Employee> employees = new ArrayList<Employee>();
        for(Object[] employeeObject: employeeObjects) {
            Employee employee = new Employee();
            long id = ((BigInteger) employeeObject[0]).longValue();
            String name = (String) employeeObject[1];
            int age = (int) employeeObject[2];
            int admin = (int) employeeObject[3];
            boolean isAdmin=false;
            if(admin==1)
            isAdmin=true;
            Date createdDate = (Date) employeeObject[4];
            employee.setId(id);
            employee.setName(name);
            employee.setAge(age);
            employee.setAdmin(isAdmin);
            employee.setCreatedDate(createdDate);
            employees.add(employee);
        }
        System.out.println(employees);
        return employees;
    }

at this line

long id = ((BigInteger) employeeObject[0]).longValue();

Does anybody have any idea?

ArK
  • 20,698
  • 67
  • 109
  • 136

2 Answers2

1

you are executing sql statement and creating objects manually. If you use HQL or criteria Hibernate does it for you, and simplifies things. Use parametrized query, is a good practice, helps in preventing SQL injection

@Override
        public List<Employee> getAllEmployees(String employeeName) { 
            String query = "SELECT e.* FROM Employees e WHERE e.name like '%"+ employeeName +"%'";
            List<Object[]> employeeObjects = hibernateUtil.fetchAll(query);
            List<Employee> employees = new ArrayList<Employee>();
            for(Object[] employeeObject: employeeObjects) {
                Employee employee = new Employee();
                long id = ((BigInteger) employeeObject[0]).longValue();
                String name = (String) employeeObject[1];
                int age = (int) employeeObject[2];
                int admin = (int) employeeObject[3];
                boolean isAdmin=false;
                if(admin==1)
                isAdmin=true;
                Date createdDate = (Date) employeeObject[4];
                employee.setId(id);
                employee.setName(name);
                employee.setAge(age);
                employee.setAdmin(isAdmin);
                employee.setCreatedDate(createdDate);
                employees.add(employee);
            }
            System.out.println(employees);
            return employees;
        }

When you use HQL it looks like this

    @Override
        public List<Employee> getAllEmployees(String employeeName) { 
        Session session = //initialize session            
        Query query = session.createQuery("FROM Employees e WHERE e.name like '%"+ ? + "%'");
           query.setParameter(0, "%"+employeeName+"%");
           List<Employee>  employees = query.list();
           System.out.println(employees);
           return employees;
        }

Check This Ans

Community
  • 1
  • 1
Ankit Deshpande
  • 3,476
  • 1
  • 29
  • 42
0

Your id is of type long, so try to cast it to Long instead of BigInteger.

Like this: long id = (Long) employeeObject[0].longValue();

Hope this helps !

serendipity
  • 103
  • 1
  • 10
  • long id = (Long) employeeObject[0].longValue(); incorrect line, and i am repeating that me helped this long id = Long.parseLong(String.valueOf(employeeObject[0])) – Александр Apr 13 '16 at 13:28