- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
确定开始:我在 Spring 做药房项目。我正在使用 Eclipse 和数据库 PostgreSQL。
在数据库中,我有表名称:OrderItem、CustomerOrder、Product 和 Register(这是带有有关用户的通行证和信息的类)。
好的,我想删除具有给定 ID 的 CustomerOrder。
co.deleteCustomerOrder(co.getCustomerOrder(id));
如果我这样做,我会遇到这样的错误:
详细信息:Key(orderid)=(1421007984736) 在表“orderItem”中有调用错误:表“customerorder”上的修改或删除违反了外键“fk60163f61b0099af4”表“orderitem”
所以我把这个放在第一位
cos.deleteOrderItem(cos.getOrderItem(id))
然后
co.deleteCustomerOrder(co.getCustomerOrder(id));
现在我遇到这样的错误:
HTTP 状态 500 - 请求处理失败;嵌套异常是 java.lang.IllegalArgumentException:尝试使用 null 实体创建删除事件
也许某些实体类存在问题:注册或其他。顺便说一句,当我使用 PgAdminIII orderItem 删除时,当然我不会收到第一个错误,我可以完成这行代码
co.deleteCustomerOrder(co.getCustomerOrder(id));
正常情况下。
****如何解决第二个错误?我不想使用 PgAdmin xD****
我的一些代码。
package app.Spring.domain;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "CustomerOrder")
public class CustomerOrder {
@Id
@Column(name = "orderID")
private long orderID;
@ManyToOne(cascade = { CascadeType.MERGE })
private Register register;
@Column(name = "status")
private String status;
@Column(name = "totalCost")
private float totalCost;
@Column(name = "orderDate")
private Date orderDate;
public CustomerOrder() {
}
public CustomerOrder(long orderID, Register register, String status,
float totalCost, Date orderDate) {
this.orderID = orderID;
this.register = register;
this.status = status;
this.totalCost = totalCost;
this.orderDate = orderDate;
}
public long getOrderID() {
return orderID;
}
public void setOrderID(long orderID) {
this.orderID = orderID;
}
public Register getRegister() {
return register;
}
public void setRegister(Register register) {
this.register = register;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public float getTotalCost() {
return totalCost;
}
public void setTotalCost(float totalCost) {
this.totalCost = totalCost;
}
public Date getOrderDate() {
return orderDate;
}
public void setOrderDate(Date orderDate) {
this.orderDate = orderDate;
}
}
package app.Spring.domain;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "OrderItem")
public class OrderItem {
@Id
@Column(name = "itemID")
private long itemID;
@ManyToOne(cascade = { CascadeType.MERGE })
private Product product;
@ManyToOne(cascade = { CascadeType.MERGE })
private CustomerOrder customerOrder;
@Column(name = "quantity")
private int quantity;
public OrderItem() {
}
public OrderItem(long itemID, Product product, CustomerOrder customerOrder,
int quantity) {
this.itemID = itemID;
this.product = product;
this.customerOrder = customerOrder;
this.quantity = quantity;
}
public long getItemID() {
return itemID;
}
public void setItemID(long itemID) {
this.itemID = itemID;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public CustomerOrder getCustomerOrder() {
return customerOrder;
}
public void setCustomerOrder(CustomerOrder customerOrder) {
this.customerOrder = customerOrder;
}
public long getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
}
Controller
@Controller
@RequestMapping("/admin/users")
public class AdminController {
@Autowired
LocalValidatorFactoryBean validator;
@Autowired
RegisterService reg;
@Autowired
CustomerOrderService co;
@Autowired
OrderItemService cos;
@RequestMapping("/removecustomer/{id}")
public String removeCustomerOrderById(@PathVariable Long id) {
System.out.println("remove customerOrderID "+id);
cos.deleteOrderItem(cos.getOrderItem(id));
co.deleteCustomerOrder(co.getCustomerOrder(id));
return "redirect:/";
}
}
客户订单服务
public class CustomerOrderImpl implements CustomerOrderService{
protected final Logger log = LoggerFactory.getLogger(getClass());
protected SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Override
public CustomerOrder getCustomerOrder(Long id) {
return (CustomerOrder)sessionFactory.getCurrentSession().get(CustomerOrder.class.getName(), id);
}
public void deleteCustomerOrder(CustomerOrder v) {
sessionFactory.getCurrentSession().delete(v);
sessionFactory.getCurrentSession().flush();
}
}
订单服务
public class OrderItemImpl implements OrderItemService {
protected final Logger log = LoggerFactory.getLogger(getClass());
protected SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public OrderItem getOrderItem(Long id) {
return (OrderItem)sessionFactory.getCurrentSession().get(OrderItem.class.getName(), id);
}
public void deleteOrderItem(OrderItem v) {
sessionFactory.getCurrentSession().delete(v);
sessionFactory.getCurrentSession().flush();
}
}
最佳答案
cos.deleteOrderItem(cos.getOrderItem(id));
co.deleteCustomerOrder(co.getCustomerOrder(id));
表中的每条记录(行)都有一个键。您正在使用相同的键删除两个不同表中的项目。
除非它们碰巧处于一对一关系,否则记录的 ID 不会反射(reflect)这种关系。在本例中,您尝试使用未记录的 key 删除订单项。
说白了:
您想要删除 customerOrder 16;
您无法删除 customerOrder 16;因为由于外键,它具有与其相关的 orderItems 4 和 5。
您正在尝试删除订单项目 16;不存在(第二个错误)。
正确的解决方案是:
设置要级联删除的 customerOrder 和 orderItems 的关系(cascade = {CascadeType.DELETE, CascadeType.MERGE})
在删除customerOrder
之前,找到相关的orderItems
并将其删除(同样,不同元素的键不会相关)。
如果您在理解键、外键和级联的概念时遇到问题,您应该首先了解有关 SQL 工作原理的更多信息。
关于java - 从数据库中删除表 OrderItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27893362/
确定开始:我在 Spring 做药房项目。我正在使用 Eclipse 和数据库 PostgreSQL。 在数据库中,我有表名称:OrderItem、CustomerOrder、Product 和 Re
我正在使用 django-rest-framework 从头开始构建我自己的电子商务系统。 这是我的系统架构的描述: 数据库格式 = PostgresSQL 一个帐户有许多LineItems(又名
我正在尝试使用 jpa 在 java 中设计和编码一个基本的商店 Web 应用程序。 当用户在 ShoppingCart 中选择产品时,我创建了一个列表 Cartitem s。 Cartitem 的生
我现在正在创建电子商务,当我尝试将商品添加到购物车时,它会返回上述错误吗? 它提示 View 中的这行代码: else: order.items.add(order_item) 查看 def a
我有两个表 Orders 和 OrderItem 如下: @Entity @Table(name = "orders") public class Order implements Serializa
所以我今天花了大约 5 到 6 个小时来与 Symfony2 表单作斗争,现在我想从社区的其他成员那里得到一些建议。我尝试了 3 种不同的方法来实现我所追求的目标,但没有成功。我通读了文档,用谷歌搜索
models/order_item.rb class OrderItem reload! Reloading... => true 2.1.3 :022 > Order => Order(i
Internet 上的大多数问题都集中在 Order、OrderItem 上。设计一个全面处理在线零售所有方面(订单、订单项目、返回、退款、换货)的数据库几乎没有什么问题。 我只是基本了解这个数据模型
因此,在尝试运行我的 grails 应用程序时,我不断收到主题行错误。这是我的两个域类,它们似乎是导致错误的原因。 在线订购: package rewards class OnlineOrder {
我是一名优秀的程序员,十分优秀!