Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate@manytone映射问题_Java_Spring_Hibernate_Hql_Hibernate Mapping - Fatal编程技术网

Java Hibernate@manytone映射问题

Java Hibernate@manytone映射问题,java,spring,hibernate,hql,hibernate-mapping,Java,Spring,Hibernate,Hql,Hibernate Mapping,我有两个表类别和产品。其中category id是products表中的外键。当我尝试使用hql在products表中插入数据时,我的category表也会更新,并且假设category是mobile,其id为1,则更新后的id将为1且为null。这是密码 Products.java package com.main.model; import javax.persistence.CascadeType; import javax.persistence.Column; import j

我有两个表类别和产品。其中category id是products表中的外键。当我尝试使用hql在products表中插入数据时,我的category表也会更新,并且假设category是mobile,其id为1,则更新后的id将为1且为null。这是密码

Products.java

    package com.main.model;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name="Products")
public class Products {
@Id@GeneratedValue(strategy=GenerationType.AUTO)    
private int id;
@Column
private String productname;
@Column
private String productstore;
@Column
private String productdesc;
@Column
private double price;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="categoryid")
private Category category;
private String imagePath;
public Category getCategory() {
    return category;
}
public void setCategory(Category category) {
    this.category = category;
}
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getProductname() {
    return productname;
}
public void setProductname(String productname) {
    this.productname = productname;
}
public String getProductstore() {
    return productstore;
}
public void setProductstore(String productstore) {
    this.productstore = productstore;
}
public String getProductdesc() {
    return productdesc;
}
public void setProductdesc(String productdesc) {
    this.productdesc = productdesc;
}
public double getPrice() {
    return price;
}
public void setPrice(double price) {
    this.price = price;
}
public String getImagePath() {
    return imagePath;
}
public void setImagePath(String imagePath) {
    this.imagePath = imagePath;
}


}
Category.java

package com.main.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="Category")
public class Category {
    @Id@GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="category_id")
    private int id;
    @Column
    private String categoryName;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getCategoryName() {
        return categoryName;
    }
    public void setCategoryName(String categoryName) {
        this.categoryName = categoryName;
    }



}
admin.jsp

<form id="asd" action="/shopping_cart/addProduct" method="post">
    <center>
                <h3>Please Enter Product Details</h3>
                  Category<select name="category.id">
                <option name="mobiles" value="1">Mobiles</option>
                <option name="" value="2">Books</option>
                <option name="" value="3">EarPhones</option>
            </select><br /> <br /> 
                Product Name <input type="text" value="" name="productname" width="100%" /><span
                    id="errorname" required></span> <br /> <br /> Product Store &nbsp;
                &nbsp; <input type="text" value="" name="productstore" required /> <span
                    id="error_address" required></span><br /> <br />
                Product Desc<input
                    type="text" value="" name="productdesc" required> <span
                    id="error_city"></span><br /> <br /> Image Path
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input
                    type="text" value="" name="imagePath" /><span id="error_state"></span>
                <br /> <br /> Price
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input
                    type="number" value="" name="price" /><span id="error_zipcode"></span>
                <br /> <br />
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input
                    type="submit" value="Add Product" name="addProduct" /> 
            </center>
    </form> 
DAOImpl类

package com.main.dao;

import javax.annotation.Resource;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.stereotype.Repository;

import com.main.model.Products;
@Repository
public class AdminDAOImpl implements AdminDAO  {@Resource(name="sessionFactory")
protected SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
}
    public void addProduct(Products product) {
        Session session=sessionFactory.openSession();
        Transaction tx=session.beginTransaction();
        session.save(product);
        tx.commit();
        session.close();
    }

}

提前感谢。

您在Products.java抱歉兄弟的插页中发布了两次Category.java。编辑了问题。如果您的问题是为什么在插入/更新产品时它也会更新类别:因为您设置了
cascade=CascadeType.ALL
。如果你想自己单独处理实体和更新,那么就不要使用cascade来处理关系。这很有效。非常感谢你的帮助。请告诉我什么时候应该使用cascade=CascadeType.ALL以及什么时候避免它???@911dibush你在产品的插入部分发布了Category.java两次。javasorry bro。编辑了问题。如果您的问题是为什么在插入/更新产品时它也会更新类别:因为您设置了
cascade=CascadeType.ALL
。如果你想自己单独处理实体和更新,那么不要在关系中使用cascade。这很有效。非常感谢你的帮助。请告诉我何时应该使用cascade=CascadeType.ALL以及何时避免它???@911dibush
package com.main.dao;

import javax.annotation.Resource;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.stereotype.Repository;

import com.main.model.Products;
@Repository
public class AdminDAOImpl implements AdminDAO  {@Resource(name="sessionFactory")
protected SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
}
    public void addProduct(Products product) {
        Session session=sessionFactory.openSession();
        Transaction tx=session.beginTransaction();
        session.save(product);
        tx.commit();
        session.close();
    }

}