java - Hibernate 外键约束失败

标签 java mysql hibernate

我想创建名为 CustomerOrders 的 SQL 数据库表 SQL:

CREATE TABLE Customer (
  customer_id INT NOT NULL AUTO_INCREMENT,
  customer_name VARCHAR(255) UNIQUE,
  PRIMARY KEY (customer_id)
);


CREATE TABLE Orders (
  order_id INT NOT NULL AUTO_INCREMENT,
  customer_name VARCHAR(255),
  order_date DATETIME,
  PRIMARY KEY(order_id),
  FOREIGN KEY (customer_name) REFERENCES Customer(customer_name)
  ON UPDATE CASCADE
  ON DELETE CASCADE
);

然后我想插入一个带有对 Customer 对象的引用的 Orders 对象。 Java 和 Hibernate:

Transaction tx = session.beginTransaction();
Customer cu = (Customer) session.load(Customer.class, 1);

Date d = new Date();
Orders od = new Orders(cu, d);
od.setCustomer(cu);

Set<Orders> hs = new HashSet<Orders>();
hs.add(od);
cu.setOrderses(hs);

 session.save(cu);
 session.save(od);
 tx.commit();

插入返回异常: 无法添加或更新子行:外键约束失败 我所做的一切都与 Hibernate 教程中的完全一样。 我做错了什么?

Java 类

    public class Customer  implements java.io.Serializable {


     private Integer customerId;
     private String customerName;
     private Set<Orders> orderses = new HashSet<Orders>(0);

    public Customer() {
    }

    public Customer(String customerName, Set<Orders> orderses) {
       this.customerName = customerName;
       this.orderses = orderses;
    }

    public Integer getCustomerId() {
        return this.customerId;
    }

    public void setCustomerId(Integer customerId) {
        this.customerId = customerId;
    }
    public String getCustomerName() {
        return this.customerName;
    }

    public void setCustomerName(String customerName) {
        this.customerName = customerName;
    }
    public Set<Orders> getOrderses() {
        return this.orderses;
    }

    public void setOrderses(Set<Orders> orderses) {
        this.orderses = orderses;
    }

}

    public class Orders  implements java.io.Serializable {


     private Integer orderId;
     private Customer customer;
     private Date orderDate;

    public Orders() {
    }

    public Orders(Customer customer, Date orderDate) {
       this.customer = customer;
       this.orderDate = orderDate;
    }

    public Integer getOrderId() {
        return this.orderId;
    }

    public void setOrderId(Integer orderId) {
        this.orderId = orderId;
    }
    public Customer getCustomer() {
        return this.customer;
    }

    public void setCustomer(Customer customer) {
        this.customer = customer;
    }
    public Date getOrderDate() {
        return this.orderDate;
    }

    public void setOrderDate(Date orderDate) {
        this.orderDate = orderDate;
    }

}

最佳答案

关于java - Hibernate 外键约束失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24575780/

相关文章:

java - EnableTransactionManagement 无法解析为类型 2

java - 将时区更改为伦敦时的日期问题

java - 自动生成在 Eclipse 中抛出的 stub 方法

mysql - 使用 webmatrix 选择命令

mysql - 优化MySQL查询,

mysql - Java 事务是否传播到 MySQL 存储过程?

java - 使用随机访问文件计算java中文件的行数

Mysql查询非常慢并且没有使用正确的索引(通过使用group by、IN运算符)

html - 这是什么意思?

java - 基于 Hibernate 注解的查询执行错误?