gpt4 book ai didi

java - 当访问模式依赖于一对多时,如何处理 POJO 中多对多表中的附加属性?

转载 作者:行者123 更新时间:2023-12-01 13:19:30 25 4
gpt4 key购买 nike

CREATE TABLE order (
order_id INT
,...
,CONSTRAINT ... PRIMARY KEY (order_id)
);
CREATE TABLE item (
item_id INT
,item_list_price DECIMAL(10,2)
,...
, CONSTRAINT ... PRIMARY KEY (item_id)
);
CREATE TABLE order_item (
order_id INT
,item_id INT
,order_item_current_price DECIMAL(10,2);
,CONSTRAINT ... PRIMARY KEY (order_id, item_id)
,CONSTRAINT ... FOREIGN KEY (order_id) ...
,CONSTRAINT ... FOREIGN KEY (item_id) ...
);

Order有很多Item s;每个Item可能属于许多Order s。

Item的价格可能随时变化。为了让客户检查他为 Item 支付了多少钱过去,order_item_cost字段存在于order_item中表。

当最终用户检查Item时如果要出售,它将拉取包含商品 id、名称和 listPrice 的商品列表,但不包含 currentPrice(因为 currentPrice 仅与与 order 结合使用的历史报告相关,而不是购买新的 item ).

当客户希望检查他的历史购买情况以及当时为每件商品支付的费用时,它会拉出一个包含商品列表的订单,其中包括商品 ID、名称和当前价格,但不包含 listPrice(如listPrice 仅与购买新商品有关,与历史报告无关)。

因此,尽管我的关系模式在 Order 和 Item 之间具有多对多关系,但我的 POJO 认为 Order 和 Item 之间存在一对多关系,因为永远不会存在需要多对多

这是我当前的 POJO(为了简洁而精简):

public class Order {
private int id;
private String status;
private Customer customer;
@OneToMany(mappedBy="order")
private List<Item> items;
...
}
public class Item {
private int id;
private String name;
@ManyToOne
private Order order;
private double listPrice; // List price of item, capable of changing over time
private double currentPrice; // represents the order_item_cost field in order_item table
...
}

正如您所注意到的,我没有输入 List<Order>Item类,因为我无法想象需要知道所有可能的Order曾经使用过购买的并且 Item .

然而,这感觉不对。我想知道是否应该取出currentPrice来自 Item 的成员变量并创建一个名为 OrderItem 的新 POJO这反射(reflect)了order_item表:

public class OrderItem {
private Order order;
private Item item;
private double cost;
}
public class Order {
@OneToMany(mappedBy="order_item")
private List<OrderItem> orderItems;
}
public class Item {
@OneToMany(mappedBy="order_item")
private List<OrderItem> orderItems;
}

但是,访问模式永远不会要求项目来查找与其关联的所有订单。 Item 类应该是这样的:

public class Item {
@OneToMany
private Order order;
}

或者,有没有更合适的方法使用 Hibernate 来处理这个问题?

总之:我的数据库有一个多对多模式,如 item可以属于很多order s,以及每个 order可以有很多item s,我希望记录客户当时购买该商品的价格,因为 item 的标价可以换。然而,我的应用程序的访问模式只要求它看起来像 order 之间的一对多关系。和item 。我不确定 POJO 或 hibernate 应该如何处理这个问题。

最佳答案

您肯定需要对 OrderItem 对象进行建模,因为它是一个具有自己的属性(成本)的关系对象。您应该对 Order 1->n OrderItem n->1 Item 进行建模。数据库应该以类似的方式建模 - 订单不包含商品,因为价格不是商品价格,而是 order_item 价格。

关于java - 当访问模式依赖于一对多时,如何处理 POJO 中多对多表中的附加属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22158687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com