【问题标题】:What is better, using @manytomany or create entity for intermediate table?使用@manytomany 或为中间表创建实体更好?
【发布时间】:2018-03-21 00:37:43
【问题描述】:

确实,使用关系多对多比通过实体呈现中间表更容易,但我不喜欢这个注释有很多理由:

  1. 无法在我的中间表中添加新列
  2. 按实体匹配中间表看起来比使用@ManyToMany 更接近现实

你怎么看?

【问题讨论】:

  • 添加新列并非不可能。您只需要相应地更改映射。不需要将简单的链接表映射为实体。没有人阻止你,但不要认为每个人都同意你对它“看起来更接近现实”的看法。毕竟,ORM 是一种抽象。
  • 我想知道使用@ManyToMany 本质上没有任何问题,但在实践中,我通常需要链接本身的附加属性,此时,关系成为它自己的实体。通过改变关系,我也应该改变模型,这可能会很昂贵,这就是为什么我更喜欢从一开始就使用实体
  • 然后继续您的偏好。只是不要指望它在这里被誉为普遍真理。
  • @kayaman 我没想到,只是想听听社区的意见

标签: java hibernate orm many-to-many eclipselink


【解决方案1】:

这是一个个案。

1) 在某些情况下,关系实际上具有与之关联的“状态”。在多对多关系的情况下,如果你想在你的关系中添加一个状态/属性,那么你需要把你的关系变成一个独立的实体。因此,除了外键之外,这将导致连接表中的新列。 这需要更新您的映射。这是一个很好的例子: http://www.mkyong.com/hibernate/hibernate-many-to-many-example-join-table-extra-column-annotation/

从技术上讲,我们在这里没有使用@ManyToMany 映射,但从逻辑上讲,它是多对多关系。新实体(关系实体)将与每个现有实体类型具有多对一关系,并且每个实体类型将与表示该关系的新实体具有一对多关系

2) 如果不需要维护第 1 点中提到的关系 "state",那么简单地使用 @ManyToMany 关联映射就足够了。它消除了维护/管理单独实体以表示关系的需要。否则,单独的实体只会使您的对象模型复杂化。

【讨论】:

    猜你喜欢
    • 2016-03-31
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 2018-05-15
    相关资源
    最近更新 更多