简体   繁体   English

CRUD操作中的ClassCastException

[英]ClassCastException in CRUD operation

I am trying to do add product of the CRUD operation.At first i did it without ajax.Now changed the string method to suit ajax. 我正在尝试添加CRUD操作的产品。起初我没有使用ajax。现在更改了字符串方法以适合ajax。 when i add a product , it throws this exception 当我添加产品时,它将引发此异常

"java.lang.ClassCastException: java.lang.Integer cannot be cast to com.shop.model.Product" “ java.lang.ClassCastException:java.lang.Integer无法转换为com.shop.model.Product”

Stack points to these lines of DAO and service respectively 堆栈分别指向DAO和服务的这些行

return (Product) sessionFactory.getCurrentSession().save(product); 
return productDAO.addProduct(product);

Model 模型

@Entity
@Table(name="PRODUCTS")
public class Product {
    @Id
    @Column(name="ID")
    @GeneratedValue
    private Integer id;
    @NotEmpty
    @Column(name="PRODUCT_NAME")
    private String productName;
    @NotNull
    @Min(1)
    @Column(name="PRICE")
    private BigDecimal  price;
    @NotNull
    @Min(1)
    @Column(name="QUANTITY")
    private int quantity;

    @NotEmpty
    @Column(name="description")
    private String description;

    @ManyToOne
    @JoinColumn(name = "categoryId")
    private Category category;

// setters and getters

Contoller 控制器

@RequestMapping("addproduct.html")
    public String viewaddProduct(Map model) {
        Product product = new Product();   
        model.put("product", product);
        return "addproduct";
    }

    @RequestMapping(value ="addproduct", method = RequestMethod.POST,
            produces = MediaType.APPLICATION_JSON_VALUE,
            consumes = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public Product addProduct(@RequestBody Product product,
             Map model) {
            model.put("productList", productService.listProducts());
            model.put("categoryList", categoryService.listCategories());
           return     productService.addProduct(product);

ProductDAOImpl 产品展示

public Product addProduct(Product product) {
        return (Product) sessionFactory.getCurrentSession().save(product); 
    }

ProductServiceImpl ProductServiceImpl

@Transactional
    public Product addProduct(Product product) {
        return productDAO.addProduct(product);
    }

JSP JSP

<script>$(document).ready(function() {

      $('#Form').submit(function(event) {

          var productName = $('#productName').val();
          var price = $('#price').val();
          var quantity = $('#quantity').val();
          var json = { "productName" : productName, "price" : price, "quantity": quantity};

        $.ajax({
            url: $("#Form").attr( "action"),
            data: JSON.stringify(json),
            type: "POST",

            beforeSend: function(xhr) {
                xhr.setRequestHeader("Accept", "application/json");
                xhr.setRequestHeader("Content-Type", "application/json");
            },
            success: function(product) {
                var respContent = "";

                respContent += "<span class='success'>Product was created: [";
                respContent += product.productName + " : ";
                respContent += product.price + " : " ;
                respContent += product.quantity + "]</span>";

                $("#FromResponse").html(respContent);       
            }
        });

        event.preventDefault();
      });

    });</script>
<body>

<div id="FromResponse"></div> 
<h3> Form</h3>
<FONT color="blue"></FONT>
<form:form id="Form" action="addproduct.json" commandName="product" method="POST">
<table>
<tr><td>Product Name:<FONT color="red"><form:errors path="productName" /></FONT></td></tr>
<tr><td><form:input path="productName" /></td></tr>
<tr><td>Price:<FONT color="red"><form:errors path="price" /></FONT></td></tr>
<tr><td><form:input path="price" /></td></tr>
<tr><td>Quantity:<FONT color="red"><form:errors path="quantity" /></FONT></td></tr>
<tr><td><form:input path="quantity" /></td></tr>

<tr><td>Category:<FONT color="red"><form:errors path="category.cid" /></FONT></td></tr>
<tr><td><form:input path="category.cid" /></td></tr>
<tr><td>Description:<FONT color="red"><form:errors path="description" /></FONT></td></tr>
<tr><td><form:textarea path="description" cols="65" rows="10"/></td></tr>

<tr><td><input type="submit" value="Add Products" /></td></tr>
</table>
</form:form>

</body>

sessionFactory.getCurrentSession().save(product) is returning the identifier of type java.lang.Integer you are type casting it to com.shop.model.Product class hence you are getting the error. sessionFactory.getCurrentSession().save(product)返回类型为java.lang.Integer的标识符,您正在将其强制转换为com.shop.model.Product类,因此出现错误。

public Serializable save(String entityName, Object object) throws HibernateException
Persist the given transient instance, first assigning a generated identifier. 坚持给定的瞬态实例,首先分配一个生成的标识符。 (Or using the current value of the identifier property if the assigned generator is used.) This operation cascades to associated instances if the association is mapped with cascade="save-update" . (或者,如果使用分配的生成器,则使用标识符属性的当前值。)如果关联是通过cascade="save-update"映射的,则此操作将级联到关联的实例。
Parameters: object - a transient instance of a persistent class 参数: object-持久类的瞬时实例
Returns: the generated identifier 返回:生成的标识符

What you can do .. 你可以做什么 ..

sessionFactory.getCurrentSession().save(product); 
return product;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM