设计数据库的正确方法是阻止Hibernate为一对一关系进行不必要的连接

时间:2014-12-03 12:53:20

标签: java hibernate

我遇到了一对一关系的问题,导致表的不必要的连接,在许多情况下我不需要这些数据。而且据我所知,似乎很明显我们无法让hibernate不加入某些表或将它们保持为延迟加载。

我找到了两个解决此问题的方法:

  1. 标量本机sql似乎是一个选项,但这也不是一个好主意。
  2. 将一方作为OneToMany,并返回一个列表。那很难看。
  3. 所以,我想知道,有没有办法在数据库表及其关系中进行更改,这有助于解决这个问题。例如,我当前的表格设计如下图所示:

    enter image description here

    此处,每当我加载订单时,它也会自动加入发货 BillingInfo 表,但跳过加入客户 ShippingAddress 表。

    由此我想到在订单表中为货件 BillingInfo 添加 FK 列,但似乎有点奇怪。因为对于订单,没有必要提供BillingInfo和Shipment信息。对于可能被填充但可能没有填写的条目,添加FK列似乎会给订单表带来额外负担。

    - >为此,我想听取专家的意见,了解应该如何设计表来处理这种情况。

    与此类似,我还有2-3个表,它们也会像Order of Shipment和BillingInfo一样被加入和获取。这使得获取Order表记录非常庞大。

    订单实体类中的代码如下:

    @OneToOne(fetch = FetchType.LAZY, mappedBy = "order")
    public Shipment getShipment() {
        return shipment;
    }
    
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "ShippingAddressId")
    public Address getShippingAddress() {
        return shippingAddress;
    }
    

    货件实体中的代码如下:

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "OrderId", nullable = false)
    public Order getOrder() {
        return order;
    }
    

0 个答案:

没有答案