请大家看看配置有没有问题,先看代码:
一方:
package com.entity;  
  
import java.io.Serializable;  
import java.util.Date;  
import java.util.HashSet;  
import java.util.Set;  
  
import javax.persistence.CascadeType;  
import javax.persistence.Column;  
import javax.persistence.Entity;  
import javax.persistence.FetchType;  
import javax.persistence.GeneratedValue;  
import javax.persistence.Id;  
import javax.persistence.OneToMany;  
import javax.persistence.OrderBy;  
import javax.persistence.Table;  
import javax.persistence.Temporal;  
import javax.persistence.TemporalType;  
  
@Entity  
@Table(name = "Orders")  
public class Order implements Serializable {  
      
    @Id  
    @GeneratedValue 
    private Integer orderid;//订单号  
    private Float amount;//订单金额  
    @OneToMany(mappedBy = "order", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private Set<OrderItem> orderItems = new HashSet<OrderItem>();//订单项  
    private Date createdate;//订单创建日期  
   
    public Integer getOrderid() {  
        return orderid;  
    }  
  
    public void setOrderid(Integer orderid) {  
        this.orderid = orderid;  
    }  
      
    @Column(name="amount")//name: 映射的列名,如果不指定映射列名,容器默认将属性名称作为的映射的数据库表列名。  
    public Float getAmount() {  
        return amount;  
    }  
  
    public void setAmount(Float amount) {  
        this.amount = amount;  
    }     
    public Set<OrderItem> getOrderItems() {  
        return orderItems;  
    }  
  
    public void setOrderItems(Set<OrderItem> orderItems) {  
        this.orderItems = orderItems;  
    }  
      
    /* 
     * 添加订单 
     */  
    public void addOrderItem(OrderItem orderitem) {  
        if (!this.orderItems.contains(orderitem)) {  
            this.orderItems.add(orderitem);  
            orderitem.setOrder(this);  
        }  
    }  
  
    /* 
     * 删除订单 
     */  
    public void removeOrderItem(OrderItem orderitem) {  
        orderitem.setOrder(null);  
        this.orderItems.remove(orderitem);  
    }  
} 多方:
package com.entity;  
  
import java.io.Serializable;  
  
import javax.persistence.CascadeType;  
import javax.persistence.Column;  
import javax.persistence.Entity;  
import javax.persistence.GeneratedValue;  
import javax.persistence.Id;  
import javax.persistence.JoinColumn;  
import javax.persistence.ManyToOne;  
import javax.persistence.Table;  
  
@Entity  
@Table(name = "OrderItems")//name = "OrderItems",表示本实体对应数据库表 OrderItems,可选。  
public class OrderItem implements Serializable {  
  
    @Id  
    @GeneratedValue    
    private Integer id;//作为主键  
    private String productname;//产品名称  
    private Float price;//价格 
    @ManyToOne(cascade = CascadeType.REFRESH, optional = false)  
    @JoinColumn(name = "order_id",referencedColumnName="orderid")   
    private Order order;//对应的订单  
  
 
    public OrderItem() {  
    }  
       
    public OrderItem(String productname, Float price) {  
        this.productname = productname;  
        this.price = price;  
    }  
    
    public Integer getId() {  
        return id;  
    }  
  
    public void setId(Integer id) {  
        this.id = id;  
    }  
  
    @Column(name="productname")  
    public String getProductname() {  
        return productname;  
    }  
  
    public void setProductname(String productname) {  
        this.productname = productname;  
    }  
      
    @Column(name="price")  
    public Float getPrice() {  
        return price;  
    }  
  
    public void setPrice(Float price) {  
        this.price = price;  
    }   
    public Order getOrder() {  
        return order;  
    }  
  
    public void setOrder(Order order) {  
        this.order = order;  
    }  
} 现在出现一个问题:当我删除order时,数据库会抛出外键约束的异常。应该是先删除order对应的orderItem,再删除order。
可是看到只执行一句删除order的SQL。如果把外键关联去掉。只是把order删除掉了,对应的orderItem并没有?删除。
我已经为order配置了cascade = CascadeType.ALL级联操作。仍然需要我手动去删除order对应的orderItem吗?

解决方案 »

  1.   

    你这个是双向关联,呵呵,先声明哦;
    单项的那贴说了,
    双向关联这贴在给你说下;你的问题出在多的一方:
     @ManyToOne()  
        @JoinColumn(name = "order_id")   
        private Order order;//对应的订单  
    这样就可以了
      

  2.   

    试了一下不行··抛出外键约束违规的异常·当他删除order时,并没有先把其对应的orderItem删除。结果出现了外键约束违规的异常·请问如何解决?谢谢·
      

  3.   

    我知道,你哪里错了;
    呵呵,说出来你准会笑;看;
    一的一方你的是" private Integer orderid;//订单号"
    多的一方是 @JoinColumn(name = "order_id)""
    呵呵,变量名都引用错了,他能删除,那才是出怪事了