2017-02-20 9 views
-1

20 февраля 2017 10:04:26 AM org.apache.catalina.core.StandardWrapperValve вызова СИЛЬНЫЙ: Servlet.service() для сервлета [диспетчерский] в контексте с путём [/ sinisukasystem] бросил исключение [Обработка запроса не удалась; Вложенное исключение - это java.lang.ClassCastException: java.lang.Integer нельзя отнести к com.hendri.domain.ProductType] с основной причиной java.lang.ClassCastException: java.lang.Integer не может быть отличным от com.hendri .domain.ProductType на com.hendri.dao.EmployeeDAOImpl.getAllEmployees (EmployeeDAOImpl.java:83) на com.hendri.service.EmployeeServiceImpl.getAllEmployees (EmployeeServiceImpl.java:49) в sun.reflect.NativeMethodAccessorImpl.invoke0 (Родной метод) при sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) на sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)java.lang.ClassCastException в проекте Spring-Hibernate

@SuppressWarnings("unchecked") 
    @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>(); 
     //List<ProductType> producttype = new ArrayList<ProductType>(); 
     for(Object[] employeeObject: employeeObjects) { 
      Employee employee = new Employee(); 
      long id = ((BigInteger) employeeObject[0]).longValue();   
      int age = (int) employeeObject[1]; 
      String name = (String) employeeObject[2]; 
      float salary = (float) employeeObject[3]; 
      ProductType productType = (ProductType) employeeObject[4]; 
      employee.setId(id); 
      employee.setName(name); 
      employee.setAge(age); 
      employee.setSalary(salary); 
      employee.setProductType(productType); 
      employees.add(employee); 
     } 
     System.out.println(employees);enter code here 
     return employees; 
    } 
+0

пожалуйста, поделитесь класс сотрудника и его Hibernate отображения с столбца базы данных. –

+0

'ProductType productType = (ProductType) employeeObject [4];' Вероятно, вы сохраняете число в этом столбце. – vegemite4me

+0

В чем ваш вопрос? –

ответ

-1

Лучший способ,

String query = "SELECT e FROM Employee e WHERE e.name like '%"+ employeeName +"%'"; 
//This query fetches the rows as List of Employee objects. 
List<Employee> employeeObjects = HibernateUtil.getSession().createQuery(query).list(); // I'm not familiar with 'HibernateUtil'. So please confirm if this line is correct. 
//Now you can get each Employee like 
for(Employee employee : employeeObjects) { 
     long id = employee.getId(); 
     int age = employee.getAge(); 
     String name = employee.getName(); 
     float salary = employee.getSalary() 
     ProductType productType = employee.getProductType(); 
} 

Вам не нужно использовать List из Object[]. Используйте List из Employee объектов.

Также вопрос имеет Employees, но он говорит List<Employee> без каких-либо 's'. Я думаю, что это опечатка!

+0

employeeObject [4] - это целочисленный тип, вызывающий CCE. Не то, как данные извлекаются. В этой ситуации может возникнуть недостаток в сопоставлении спящего режима. –

-1

Учитывая, что у вас есть отношения «один-два-один» между сотрудником и продуктом.

public class Product{ 
    private long id; 
    private String productName; 
    public long getId() { 
     return id; 
    } 
    public void setId(long id) { 
     this.id = id; 
    } 
    public String getProductName() { 
     return name; 
    } 
    public void setProductName(String productName) { 
     this.productName= productName; 
    } 
} 
public class Employee { 
    private Long id; 
    private String name; 
    private Long age; 
    private Product product; 
    public void setId(Long id) { 
     this.id = id; 
    } 
    public Long getId(){ 
     return this.id; 
    } 
    public void setAge(Long empAge) { 
     this.age = empAge; 
    } 
    public Long getAge(){ 
     return this.age; 
    } 
    public void setName(String name){ 
     this.name = name; 
    } 
    public String getName(){ 
     retun this.name; 
    } 
    public Product getProduct(){ 
     retrun this.product; 
    } 
    public void setProduct(Product product){ 
     this.product = product 
    } 
} 

<hibernate-mapping package="com.code.java"> 
<class name="Product" table="product"> 
    <id name="id" column="product_id"> 
     <generator class="native"/> 
    </id> 
    <property name="productName" column="product_name" /> 
</class> 
</hibernate-mapping> 

<hibernate-mapping package="net.code.java"> 
<class name="Employee" table="employee"> 
    <id name="id" column="employee_id"> 
     <generator class="native" /> 
    </id> 
    <property name="name" type="string" column="name" /> 
    <property name="age" type="Long" column="age" /> 
    <many-to-one name="Product" class="com.code.java.Product" 
     column="product_id" unique="true" not-null="true" 
     cascade="all" /> 
</class> 
</hibernate-mapping> 

Вы можете использовать только ProductID в спящем файл вместо продукта class.Please проверить

+0

, пожалуйста, укажите некоторые пояснения при использовании downvoting, это может помочь мне улучшить ответ. –

Смежные вопросы