【发布时间】:2026-01-11 20:40:02
【问题描述】:
我一直在关注 NetBeans AffableBean 电子商务教程,但使用 IntelliJ 作为我的 IDE。我已经完成了所有工作,直到需要将客户添加到数据库中,以及与他们所下订单相关的 CustomerOrder。教程的部分在这里可见:
https://netbeans.org/kb/docs/javaee/ecommerce/transaction.html#placeOrder
当我下订单时,我收到以下错误:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`larrys`.`customer_order`, CONSTRAINT `fk_customer_order_customer` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)
在此处刷新 EntityManager 时:
private void addOrderedItems(CustomerOrder order, ShoppingCart cart) {
em.flush(); //Here
List<ShoppingCartItem> items = cart.getItems();
for (ShoppingCartItem scItem : items) {
int productId = scItem.getProduct().getId();
OrderedProductPK orderedProductPK = new OrderedProductPK();
orderedProductPK.setCustomerOrderId(order.getId());
orderedProductPK.setProductId(productId);
OrderedProduct orderedItem = new OrderedProduct(orderedProductPK);
orderedItem.setQuantity(scItem.getQuantity());
em.persist(orderedItem);
}
}
我的完整 OrderManager 代码在这里可见:
http://pastebin.com/jRintrTS
否则请更正我,但根据我对错误的理解,我试图在customer_order 表中插入一行但不能这样做,因为customer_id 的外键引用在@ 中不存在987654328@表。但是,我已经创建了客户并在订单之前将其持久化,所以我不明白为什么在尝试创建 CustomerOrder 之前它没有将数据提交到数据库。
这是netbeans为电商项目提供的schema sql:
还有我的 persistence.xml 文件,与教程中提供的相同:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="LarrysPU" transaction-type="JTA">
<jta-data-source>jdbc/larrys</jta-data-source>
<properties/>
</persistence-unit>
</persistence>
我的项目和 NetBeans 项目唯一不同的是,在我的customer 表中,我将cityRegion 更改为town,添加了postcode 和county,并且我的项目使用了不同的名称到 AffableBean。
有没有人知道我哪里出错了?
编辑 - 遇到错误时的 GlassFish 日志:
[2015-06-11T21:18:57.799+0100] [glassfish 4.1] [FINE] [] [org.eclipse.persistence.session.file:/OBFUSCATED/Larrys/out/artifacts/Larrys/WEB-INF/classes/_LarrysPU.sql] [tid: _ThreadID=26 _ThreadName=http-listener-1(2)] [timeMillis: 1434053937799] [levelValue: 500] [[
INSERT INTO larrys.customer (id, address, cc_number, county, email, name, phone, postcode, town) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
bind => [9 parameters bound]]]
[2015-06-11T21:18:57.800+0100] [glassfish 4.1] [FINEST] [] [org.eclipse.persistence.session.file:/OBFUSCATED/Larrys/out/artifacts/Larrys/WEB-INF/classes/_LarrysPU.query] [tid: _ThreadID=26 _ThreadName=http-listener-1(2)] [timeMillis: 1434053937800] [levelValue: 300] [[
Execute query InsertObjectQuery(entity.CustomerOrder@1f3cec0)]]
[2015-06-11T21:18:57.801+0100] [glassfish 4.1] [FINE] [] [org.eclipse.persistence.session.file:/OBFUSCATED/Larrys/out/artifacts/Larrys/WEB-INF/classes/_LarrysPU.sql] [tid: _ThreadID=26 _ThreadName=http-listener-1(2)] [timeMillis: 1434053937801] [levelValue: 500] [[
INSERT INTO larrys.customer_order (id, amount, confirmation_number, date_created, customer_id) VALUES (?, ?, ?, ?, ?)
bind => [5 parameters bound]]]
[2015-06-11T21:18:57.802+0100] [glassfish 4.1] [FINE] [] [org.eclipse.persistence.session.file:/OBFUSCATED/Larrys/out/artifacts/Larrys/WEB-INF/classes/_LarrysPU.sql] [tid: _ThreadID=26 _ThreadName=http-listener-1(2)] [timeMillis: 1434053937802] [levelValue: 500] [[
SELECT 1]]
[2015-06-11T21:18:57.802+0100] [glassfish 4.1] [WARNING] [] [org.eclipse.persistence.session.file:/OBFUSCATED/Larrys/out/artifacts/Larrys/WEB-INF/classes/_LarrysPU] [tid: _ThreadID=26 _ThreadName=http-listener-1(2)] [timeMillis: 1434053937802] [levelValue: 900] [[
Local Exception Stack:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`larrys`.`customer_order`, CONSTRAINT `fk_customer_order_customer` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)
Error Code: 1452
【问题讨论】:
标签: java mysql jpa intellij-idea