当前位置: 首页 > 面试题库 >

多个@ManyToOne字段指向JPA / Hibernate中的同一实体

谢宸
2023-03-14
问题内容

我有一个Order具有billingAddress和的实体shippingAddress。我也有一个Address实体。我试图使单个地址表同时包含送货地址和帐单地址,因为没有什么区别它们,并且在一个或多个订单中帐单地址和送货地址可以相同。我已经在中使用@ManyToOne了地址字段Order,但是我不确定使这种双向传输正确的方法。

我有两个问题:

  1. 是否@ManyToOne适合地址字段,因为它实际上是n:2关系,我只是使用两个单独的字段来表示?如果没有,我该怎么办?
  2. 假设1.可以,那么如何使映射双向化(在Address实体中应使用哪些注释?)?可以通过在中的注释中列出多个列来完成此操作Address吗?

码:

@Entity
@Table(name = "orders")
public class Order {
  //...
    private Address shippingAddress;
    private Address billingAddress;

    @ManyToOne
    @JoinColumn(name = "shipping_address_id", referencedColumnName = "address_id", nullable = false)
    public Address getShippingAddress() {
        return shippingAddress;
    }

    @ManyToOne
    @JoinColumn(name = "billing_address_id", referencedColumnName = "address_id", nullable = false)
    public Address getBillingAddress() {
        return billingAddress;
    }
  //...
}

@Entity
@Table(name = "addresses")
public class Address {
    //address1, address2, city, state, etc.

    //how to link back to Orders?
    private Set<Order> orders;
}

问题答案:

关于您的第一个问题:它是ManyToOne吗?

这取决于。如果多个订单可以具有相同的收货地址,则为ManyToOne。如果只有一个订单可以具有给定的送货地址,则为OneToOne。帐单地址也一样。

我不确定使双向关联是一个好主意。在这种情况下,我可能不会这样做。但是,如果你想让它是双向的,那么你必须让 他们
双向的。您确实在这里有两个不同的关联。因此,映射如下所示:

@OneToMany(mappedBy = "shippingAddress")
private Set<Order> shippedOrders;

@OneToMany(mappedBy = "billingAddress")
private Set<Order> billedOrders;

或者,如果该关联实际上是一个OneToOne(请参阅第一个问题的答案):

@OneToOne(mappedBy = "shippingAddress")
private Order shippedOrder;

@OneToOne(mappedBy = "billingAddress")
private Order billedOrder;


 类似资料:
  • 我有实体FooDetails,它有两个字段:客户和位置列表。Customer有Address(@onetoone单向映射),而Location也有带有@onetoone映射的Address。 碰巧在客户中的地址和在位置中的地址是相同的。所有这些对象都来自远程服务,在保存之前,我手动将远程对象的ID放入实体中。映射如下所示:

  • 拥有2个实体:订单和产品。1个订单可以有多个产品,多个产品可以属于1个订单(每个产品只属于1个订单)。 尝试了@JsonIgnore。这不会返回子元素或父元素。尝试了@JsonManagedReference和@JsonBackReference-仍然没有成功。 请给我指点一下

  • 问题内容: 我目前正在阅读有关实体关联的Hibernate文档,但遇到一些困难却难以理解。它在本质上做的区别和联系。尽管我在实际项目中使用了它们,但是我无法完全理解它们之间的差异。据我了解,如果一个表/一个实体与另一个实体有关联,则该关联应来自另一侧。那么,我们应该如何根据具体情况决定选择哪个呢?它又如何影响数据库/查询/结果?到处都有很好的例子吗? PS:我认为这与问题相关,如果有人可以解释关联

  • 在JPA中,实体的字段是否可能同时具有@ManyTomany和@ManyToOne注释? 这是我的桌子: 这是我的实体(简化的ofc): 我会尽力解释: > @ManyToOne:Entity2和Entity3都有一个引用Entity1的字段。所以有一个多对一的关系。 所以有了这个,我想我必须使用@ManyTomany。但我发现了一些错误。 所以我想知道:这有可能把@ManyTomany和@Man

  • 当我映射同一个实体时,就像这里回答的那样: Hibernate与同一实体的多对多关联 在“tbl_friends”表中,我有相同含义的行。例如,我有id=1的用户和id=2的用户。在“tbl_friends”表中,当他们作为朋友链接时,我有两行 使用Hibernate或JPA引用是否可以在一行(1-2或2-1)中建立这种关系?

  • 问题内容: 我有两个模型。 什么JPA / Hibernate注解,我需要把上面,并且使协会工作? 当然,我尝试了很多事情,但没有任何效果。例如,设置 和 ald 。也尝试使用,但是只接受一个参数(不能这样做。 还考虑过将其移动到平板电脑上,但是我不确定OneToMany和ManyToOne的注释应该是什么样,因为我在那里有多个地址,而JoinColumns并没有多大意义。 起作用但未创建关联的事