java - Hibernate映射困惑

标签 java hibernate

以下定义摘自Hibernate association mapping tutorial here

每本书都与一个出版商有关,而一个出版商可能出版多本书。

我将在 Java 中用以下方式表示上述定义

class Book
{
  Publisher pub;
}

class Publisher
{
  Set<Book> books;
}

问题 1。现在我很困惑为什么教程说从书到出版商的关联称为“多对一”关联。我想在出版商和图书之间建立“一对多”关联是正确的方法。

问题 2. 下面是 Book 的 hbm。为什么我们不应该在 Publisher 的 hbm 映射中声明一对多。什么决定了这种关系映射的位置?

<class name="Book" table="BOOK"> 
  <many-to-one name="publisher" class="Publisher" column="PUBLISHER_ID" /> 
</class>

最佳答案

这取决于关系是否是双向的。请参阅此处的第 7.3.2 节 http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/collections.html#collections-mapping .

双向关系是指您既可以从父级转到子级(即出版商 -> 图书),也可以从子级转到父级(即图书 -> 出版商)。父对子是一对多,而子对父是多对一。

请注意,您不需要双向关系。 “正确的方法”完全取决于您的应用程序需要什么。如果您只需要从出版商到图书,您只需要一对多。如果您只需要从书籍转到出版商,那么您只需要多对一。如果你需要两者,你可以同时拥有(即建立双向关系)/

关于java - Hibernate映射困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5094882/

相关文章:

java - Curl 命令不起作用(Spring Boot 项目)

java - 具有两个无序字段的唯一哈希码

java - Java 中的条件 SQL where 子句

java - Hibernate Session 和线程安全

java - 一对多双向映射

java - 如何在全局范围内管理不同 Maven 项目之间的依赖关系?

java - Spring 集成 - 失败时装饰消息

java - 如何使用主键自动增量在数据库中存储值列表

java - 如何使用 JPA 和 Hibernate 在 UTC 时区中存储日期/时间和时间戳

java - 单击 ActionBar 菜单时显示 fragment 返回 null