【问题标题】:hibernate relationship mapping休眠关系映射
【发布时间】:2014-08-22 08:13:48
【问题描述】:

如果我有用户和地址表。因为每个用户都可以买卖东西,所以在 users 表中应该有 return_address、shipping_address 和 billing_address。那么如何定义这两个表的关系呢?

  1. 多对多:因为多个用户有多个地址(不同类型的地址)。
  2. 一对一:因为每个用户只有一个地址。
  3. 一对多:多个用户可以共享一个地址。

在阅读了一些关于休眠的教程后,我发现自己很困惑,因为现在它具有多对一(我知道它是一对多的回归,但仍然令人困惑)。

有人介意给我一些设计数据库以及优化数据库/查询性能的建议和建议吗?能帮助像我这样的新学习者减轻头痛会很棒。

提前谢谢你。

【问题讨论】:

  • -1:您的问题表明您不确定如何整体使用 Hibernate - 它的制定范围很广,真正的问题尚不清楚。 “给我一些提示”本身就是一个提示,通过一些教程可能是最有用的方法。
  • 你是对的。我正在学习休眠,所以关于它的每一件事对我来说都是新的。我发现自己很难理解文档,并且教程通常包含简单的案例,可以清楚地看到(作者在导师那里告诉过,是的)。有经验的人的一些建议会引导新来的学习者正确的方向,不是吗?

标签: database hibernate relational-database entity-relationship


【解决方案1】:

用户表将保存地址键。

@Entity
public class Customer{

    @ManyToOne
    @JoinColumn(name = "return_address_fk")
    private Address   returnAddress;

     @ManyToOne
    @JoinColumn(name = "shipping_address_fk")
    private Address   shippingAddress;

     @ManyToOne
    @JoinColumn(name = "billing_address_fk")
    private Address   billingAddress;
}


@Entity
public class Address{
// address properties
}

** 不要混淆。

地址应该是一个被引用的实体,意味着它的生命周期不依赖于用户。

1.) 许多用户可以有相同的返回地址。

2.) 许多用户可以拥有相同的 shippingAddress。

3.) 许多用户可以拥有相同的 billingAddress。

如果你说,一个用户可以有很多returnAddress、shippingAddress、billingAddress,那么添加Many To Many注解。将创建单独的表。

【讨论】:

  • 所以,在多对一中,我们通常在多方实体中包含单方实体的id。谢谢你的建议。
  • @IsabelIsad 如果我的回答解决了你的目的,别忘了接受回答
猜你喜欢
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多