请大家看看配置有没有问题,先看代码:
一方:
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吗?
一方:
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吗?
解决方案 »
- 请教
- 用jquery ajax方法传输中文,处理乱码的问题
- tomcat 修改一个类都要重新加载一次工程,请看
- 大家谁有过滤手机号 QQ号的JAVA代码吗
- 菜鸟问题,关于Web Sphere 5.1
- 怎样查看sql的连接数
- 电子地图系统在tomcat中正常显示在weblogic中无法显示问题
- <c:forEach>问题
- axis1.4 调用报错:faultString: java.lang.reflect.InvocationTargetException
- tomcat报错500,百度云存储SDK开发,找不到问题所在,全部错误代码已贴
- 急求学习SSH框架的相关视频
- struts2.0验证框架问题
单项的那贴说了,
双向关联这贴在给你说下;你的问题出在多的一方:
@ManyToOne()
@JoinColumn(name = "order_id")
private Order order;//对应的订单
这样就可以了
呵呵,说出来你准会笑;看;
一的一方你的是" private Integer orderid;//订单号"
多的一方是 @JoinColumn(name = "order_id)""
呵呵,变量名都引用错了,他能删除,那才是出怪事了