Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当访问模式依赖于一对多时,如何处理POJO中多对多表中的附加属性?_Java_Hibernate_Orm_Many To Many_One To Many - Fatal编程技术网

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

Java 当访问模式依赖于一对多时,如何处理POJO中多对多表中的附加属性?,java,hibernate,orm,many-to-many,one-to-many,Java,Hibernate,Orm,Many To Many,One To Many,一个订单有许多项目s;每个项目可能属于许多订单s 项目的价格可以随时更改。为了让客户检查过去为项目支付的金额,订单项目成本字段存在于订单项目表中 当最终用户检查要出售的项目时,它将提取一个项目列表,其中包含项目id、名称和标价,但不包括当前价格(因为当前价格仅与订单中的历史报告相关,而不购买新的项目) 当客户希望检查其历史购买情况以及他当时为每个项目支付的费用时,它将使用项目列表(包括项目id、名称和currentPrice,但不包括listPrice)拉取订单(因为listPrice仅与购买

一个
订单
有许多
项目
s;每个
项目
可能属于许多
订单
s

项目的价格可以随时更改。为了让客户检查过去为
项目
支付的金额,
订单项目成本
字段存在于
订单项目
表中

当最终用户检查要出售的
项目时,它将提取一个项目列表,其中包含项目id、名称和标价,但不包括当前价格(因为当前价格仅与
订单
中的历史报告相关,而不购买新的
项目

当客户希望检查其历史购买情况以及他当时为每个项目支付的费用时,它将使用项目列表(包括项目id、名称和currentPrice,但不包括listPrice)拉取订单(因为listPrice仅与购买新项目相关,而不与历史报告相关)

因此,尽管我的关系模式在订单和项目之间存在多对多关系,但我的POJO认为订单和项目之间存在一对多关系,因为永远不会有需要多对多的访问模式

以下是我目前的POJO(精简为简洁):

但是,同样,访问模式永远不需要一个条目来查找与之关联的所有订单。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;
}
或者,有没有更合适的方法使用Hibernate来处理这个问题


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

您肯定需要对OrderItem对象进行建模,因为它是一个具有自己属性(成本)的关系对象。您应该为订单1->n OrderItem n->1项目建模。DB应该类似地建模——订单不包含商品,因为价格不是商品价格,而是订单商品价格

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
    ...
}
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;
}
public class Item {
    @OneToMany
    private Order order;
}