当前位置: 首页 > 知识库问答 >
问题:

数据库中的表不与外键连接

俞子实
2023-03-14

我有4个实体列在下面的职位。客户端和产品已在数据库中。问题在于订单和订单产品。我创建Orders对象,然后添加客户机(已经在数据库中)和OrdersProducts的ArrayList,但出现了错误:

object references an unsaved transient instance - save the transient instance before flushing: pl.take.server.model.Orders.clients -> pl.take.server.model.Clients

当我不添加客户机时,数据库中只有OrderProducts的ArrayList,但OrderProducts没有外键。怎么了?我使用Mysql服务器和hibernate。

@Entity
public class Clients implements Serializable {

     @Id
     @GeneratedValue
     private int idClient;
     private String clientName, clientSurname, clientCompany;

     @OneToMany(mappedBy = "clients")
     private List<Orders> listOfOrders = new ArrayList<Orders>();
}

@Entity
public class Orders implements Serializable {

     @Id
     @GeneratedValue
     private int idOrder;
     private double totalAmount;

     @ManyToOne
     @JoinColumn(name = "idClientFK")
     private Clients clients;

     @OneToMany(cascade = CascadeType.ALL, mappedBy = "orders")
     private List<OrdersProducts> listOfProductsInOrder = new ArrayList<OrdersProducts>();
}

@Entity
public class OrdersProducts implements Serializable {

    @Id
    @GeneratedValue
    private int idOrderProduct;
    private int productAmount;
    private float productsValue;

    @ManyToOne
    @JoinColumn(name = "idOrderFK")
    private Orders orders;

    @ManyToOne
    @JoinColumn(name = "idProductFK")
    private Products products;
}

@Entity
public class Products implements Serializable {

    @Id
    @GeneratedValue
    private int idProduct;
    private String productName;
    private double productValuePerUnit;
    private String productUnit;
    private int productCount;
    private String productCompany;

    @OneToMany(mappedBy = "products")
    private List<OrdersProducts> listOfOrdersProducts = new ArrayList<OrdersProducts>();
  }

共有2个答案

苍兴怀
2023-03-14

您有双向关联订单

Hibernate不知道主对象是什么。

您有两种选择:

  1. 从一端删除双向关联并声明@OneTo多要级联。(@OneTo多(级联=CascadeType. ALL
  2. 在分配引用之前保存第二个对象。

选择第一个选项,您将以这样的方式结束:...

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "idClientFK")
private List<Orders> listOfOrders = new ArrayList<Orders>();

保存逻辑如下:

Clients client = new Client();
List<Orders> orders = new ArrayList<>();
orders.add(new Orders());
clients.setOrders(orders);
enityManager.save(clients);
司空丰
2023-03-14

考虑到你有双向关系,如果你想维持一个顺序,你必须:

>

  • 先决条件:您在SesionScope bean中有一个分离的客户端实体,在WiewScoped后备bean中有一些分离的产品实体。

    在您要持久化订单的bussines方法中:

    • 创建一个新的订单实体。
    • 更新"客户端

  •  类似资料:
    • 我对Laravel和数据库都是新手。我正在写一个学生评估的网络应用程序。我有一个现有的MySQL数据库,它已经包含了我所需要的一切;但是,我正在使用Laravel的auth user表,并尝试添加一个外键,该外键引用MySQL数据库中的教师表。我一直得到以下错误。。。 在Connection.php第664行: SQLSTATE[HY000]:一般错误:1215不能添加外键约束(SQL:改变表添加

    • 我正在尝试在table of数据库与table of数据库之间创建外键: 用户id int(10)未签名的编号 Id int(10)无符号编号 我创建了查询 "外键约束格式错误"有人能帮助我如何实现这一点吗?

    • 我使用的是ubuntu系统和Mysql 8.0。我试图用jdbc类连接数据库,但出现了一个错误,尽管我添加了mysql连接器。jar文件, 我在下面提到的错误-- JAVAlang.module。FindException:读取模块:/home/surya/eclipse workspace/Advancedjava/bin时出错,原因是:java。lang.module。InvalidModul

    • 问题内容: 我想知道在InnoDB中是否可以有一个带有 外键的 引用另一个表的表? 如果是这样,该怎么办? 问题答案: 我在http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key- constraints.html 上没有看到任何限制。 因此,只需使用 otherdb.othertable ,您会很好。

    • 我试图从一个连接表中获取数据并显示它,所以我有一个用户表和我的连接表。处方用户表具有用户id和处方id。 所以我要做的是在这个userdetails页面上,显示所有的用户处方,并访问处方名称和描述等,但是当我尝试任何一种方法时,我会得到“尝试获取非对象的属性” 我认为,用户模型与处方用户模型有很多关系,处方用户模型与用户模型有一个归属关系。 控制器 用户详细信息刀片

    • 本文向大家介绍Mysql数据库中数据表的优化、外键与三范式用法实例分析,包括了Mysql数据库中数据表的优化、外键与三范式用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Mysql数据库中数据表的优化、外键与三范式用法。分享给大家供大家参考,具体如下: 数据表优化 将商品信息表进行优化 1.创建商品种类表: 2.将商品种类写入商品种类表中: 注意:插入另一个表的查询结果不需要加