Spring MVC+;Hibernate无法获取项属性

Spring MVC+;Hibernate无法获取项属性,spring,hibernate,Spring,Hibernate,一、 我卡住了。我的数据输出有问题。我试着做一些订购产品的项目。我的实体如下: @Entity @Table(name = "sales") public class Sale implements Serializable { public Sale() { } @Id @Column @GeneratedValue(strategy = GenerationType.AUTO) private int id; @Column(

一、 我卡住了。我的数据输出有问题。我试着做一些订购产品的项目。我的实体如下:

  @Entity
@Table(name = "sales")
public class Sale implements Serializable {

    public Sale() {
    }

    @Id
    @Column
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @Column(insertable = false, updatable = false)
    private Timestamp date;

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "sale")
    private List<OrderItem> items = new ArrayList<OrderItem>();

    @Column
    private double cost;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public Timestamp getDate() {
        return date;
    }

    public void setDate(Timestamp date) {
        this.date = date;
    }

    public List<OrderItem> getItems() {
        return items;
    }

    public void setItems(List<OrderItem> items) {
        this.items = items;
    }

    public double getCost() {
    return cost;
    }

    public void setCost(double cost) {
        for(OrderItem item : items)
            cost += item.getProduct().getPrice() * item.getQuantity();
        this.cost = cost;
    }
}
@Entity
@Table(name = "products")
public class Product implements Serializable {

    public Product() {
    }

    @Id
    @Column
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @Column
    private String name;

    @Column
    private double price;

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "product")
    private Set<OrderItem> items = new HashSet<OrderItem>();

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public Set<OrderItem> getItems() {
        return items;
    }

    public void setItems(Set<OrderItem> items) {
        this.items = items;
    }

    public boolean isNew() {
        return this.id == 0;
    }

}

    @Entity
@Table(name = "order_items")
public class OrderItem implements Serializable {

    @Id
    @GeneratedValue
    @Column(name = "id")
    private Long id;

    @Column
    private int quantity;

     @ManyToOne(cascade = CascadeType.ALL)
        @JoinColumn(name = "product_id")  
    private Product product;

     @ManyToOne(cascade = CascadeType.ALL)
        @JoinColumn(name = "sale_id")  
    private Sale sale;

    public int getQuantity() {
        return quantity;
    }

    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }

    public Product getProduct() {
        return product;
    }

    public void setProduct(Product product) {
        this.product = product;
    }

}
@实体
@表(name=“销售”)
公共类Sale实现了可序列化{
公开发售(){
}
@身份证
@纵队
@GeneratedValue(策略=GenerationType.AUTO)
私有int-id;
@列(可插入=false,可更新=false)
私有时间戳日期;
@OneToMany(fetch=FetchType.EAGER,mappedBy=“sale”)
私有列表项=新的ArrayList();
@纵队
私人双重成本;
公共int getId(){
返回id;
}
公共无效集合id(内部id){
this.id=id;
}
公共时间戳getDate(){
返回日期;
}
公共作废设置日期(时间戳日期){
this.date=日期;
}
公共列表getItems(){
退货项目;
}
公共无效集合项(列表项){
这个项目=项目;
}
公共成本{
退货成本;
}
公共成本(双倍成本){
对于(订单项:项)
成本+=item.getProduct().getPrice()*item.getQuantity();
成本=成本;
}
}
@实体
@表(name=“产品”)
公共类产品实现可序列化{
公共产品(){
}
@身份证
@纵队
@GeneratedValue(策略=GenerationType.AUTO)
私有int-id;
@纵队
私有字符串名称;
@纵队
私人双价;
@OneToMany(fetch=FetchType.EAGER,mappedBy=“product”)
private Set items=new HashSet();
公共int getId(){
返回id;
}
公共无效集合id(内部id){
this.id=id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公开双价{
退货价格;
}
公共定价(双倍价格){
这个价格=价格;
}
公共集合getItems(){
退货项目;
}
公共无效集合项(集合项){
这个项目=项目;
}
public boolean isNew(){
返回this.id==0;
}
}
@实体
@表(name=“订单项目”)
公共类OrderItem实现可序列化{
@身份证
@生成值
@列(name=“id”)
私人长id;
@纵队
私人整数数量;
@多通(级联=级联类型.ALL)
@JoinColumn(name=“产品标识”)
私人产品;
@多通(级联=级联类型.ALL)
@JoinColumn(name=“sale\u id”)
私人买卖;
公共整数getQuantity(){
退货数量;
}
公共无效设置数量(整数数量){
这个。数量=数量;
}
公共产品{
退货产品;
}
公共产品(产品){
本产品=产品;
}
}
SQL表的创建方式如下: 创建表格产品( id序列主键不为空, 名称字符(50)不为空, 不动产价格不为空 ) 带(OID=假)

创建表销售( id序列主键不为空, 实际成本不为空, 日期时间戳非空默认当前时间戳 ) 带(OID=假)

创建表格订单项目( 序列号不为空, 销售标识整数不为空, 乘积_id整数, 数量整数不为空, 主键(销售标识,id) ) 带(OID=假)

更改表格顺序\u项 添加约束订单\项SFK0外键(产品\标识)引用产品(标识); 更改表格顺序\u项 添加约束订单\项SFK1外键(销售\标识)引用销售(标识)

我的销售表格:


产品
量

成本

我在形式上有问题,我试图增加销售。项目不正确,无法保存。我把jsp代码写错了,但我不知道如何把它弄对。需要帮助,请

你有日志吗?确保您的帖子到达服务器端。

已解决。我在项目中重新制作了一些东西,jsp部分。添加添加页面,一切正常。

ava.lang.IllegalArgumentException:“items”不能为null org.springframework.util.Assert.notNull(Assert.java:115)org.springframework.web.servlet.tags.form.AbstractMulticheckeDeleteTag.setItems(AbstractMulticheckeDeleteTag.java:84)org.apache.jsp.WEB_002dINF.jsp.sales.saleform_jsp.\u jspx_meth_表单_005fradiobuttons_005f0(saleform_jsp.java:571)org.apache.jsp.WEB_002dINF.jsp.sales.saleform_jsp.\u jsp服务(saleform_jsp.java:265)org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)我需要对OrderItem的访问权限,当我尝试添加它时,
t无法访问此字段。
    <form:hidden path="id" />


    <spring:bind path="items">
        <div class="form-group ${status.error ? 'has-error' : ''}">
            <label class="col-sm-2 control-label">Product</label>
            <div class="col-sm-5">
                <form:select path="items" class="form-control">
                    <form:options items="${productMap}" />
                </form:select>
                <form:errors path="items" class="control-label" />
            </div>
            <div class="col-sm-5"></div>
        </div>
    </spring:bind>

    <spring:bind path="items">
        <div class="form-group ${status.error ? 'has-error' : ''}">
            <label class="col-sm-2 control-label">Quantity</label>
            <div class="col-sm-10">
                <form:radiobuttons path="items" items="${numberList}" element="label class='radio-inline'" />
                <br />
                <form:errors path="items" class="control-label" />
            </div>
        </div>
    </spring:bind>

    <spring:bind path="cost">
        <div class="form-group ${status.error ? 'has-error' : ''}">
            <label class="col-sm-2 control-label">Cost</label>
            <div class="col-sm-10">
                <form:input path="cost" type="text" class="form-control" id="cost"
                    placeholder="Cost" />
                <form:errors path="cost" class="control-label" />
            </div>
        </div>
    </spring:bind>