【发布时间】:2020-12-25 01:42:34
【问题描述】:
我是java EE的新手,并且是自学的,所以请耐心等待。到目前为止,我的数据库中有 3 个简单的表:
| Sales | Products |
|---|---|
| Sale_id | Product_id |
| Sale_details |
|---|
| Saleid_fk |
| Productid_fk (fk) |
| Quantity_sold |
如何在不创建 sale_details 实体的情况下保留新的 sale_details。因为 Java 不允许我在没有主键的情况下将 sale_details 命名为 @Entity。 这个当前代码给了我一个错误,说明我需要声明一个主键。我尝试根据 stackoverflow 上的答案使用 Idclass,但它没有做任何事情。
@Entity
@Table(name="sale_details")
@IdClass(value = SaleDetails.class)
public class SaleDetails implements Serializable {
@Column(name = "saleid_fk")
private int saleid_fk;
@Column(name = "productid_fk")
private String productid_fk;
@Column(name = "quantity_sold")
private int quantity_sold;
【问题讨论】:
-
你能分享确切的表定义吗?特别是:您能否验证表
sale_details上的(Sale_id, Product_id)对是否受到UNIQUE约束的保护? --- 代码注释:SaleDetails类中的列名与表sale_details中的列名不匹配。 -
@Turing85 我发布了表格定义,我手动输入了表格图表,所以这就是为什么它们不一样,我为混乱道歉。 Sale_id 和 Product_id 不是唯一的,因为一个 sane_id 可能有多个 sale_details 和/或一个产品有多个 sale_details。
-
在这种情况下,
(saleid_fk, quantity_sold)对是唯一的,可用于 JPA@EmbeddedId或@IdClass。详情请见this article at Baelung。 -
备注:我质疑将
(saleid_fk, quantity_sold)设为唯一的决定。如果在同一销售中以相同的数量出售两个单独的物品怎么办?目前的结构不允许这种情况。 -
@Turing85 不会吗?它们将具有相同的 sale_id 和数量,但具有不同的 Product_id。我尝试了 Idclass,得到了这个错误:异常描述:无效的复合主键规范。主键类[com.owl.server.objects.SaleDetails]和实体bean类[class com.owl.server.objects.SaleDetails]中的主键字段或属性的名称必须对应,并且它们的类型必须对应。是一样的。
标签: java jpa eclipselink jpa-2.1 java-ee-8