【发布时间】:2013-07-01 11:10:54
【问题描述】:
我正在做我自己的项目,并且有一些东西要存储在 mysql 数据库中。 在考虑什么应该是最好的解决方案之后,不要在数据库中重复相同的值,我没有找到答案。
举个例子,
表 Cars 与行 Cars_ID 和 Cars_VALUE
-=JoinTable between Cars and Cars_CreationDate=-
表 Cars_CreationDate 与行 Cars_CreationDate_ID 和 Cars_CreationDate_VALUE
-=JoinTable between Cars_CreationDate and Cars_Description=-
表 Cars_Description 与行 Cars_Description_ID 和 Cars_Description_VALUE
在休眠实体中,我会有这样的关系:
在实体Cars_CreationDate 和Cars @ManyToMany 之间,关系的所有者是Cars_CreationDate。因为一个日期可以做很多Cars,一个日期可以有很多车。
在实体Cars_Description和Cars@ManyToOne之间,关系的所有者是Cars实体,实体Cars_Description属于Cars。实体Cars_Description 每次都使用Cars 从数据库中提取。 fetchType=EAGER
现在让我们看看我们是否在数据库中已经制作了一些Cars,我想为这辆车添加新日期,我想说:
Cars cars = (Cars)session.get(Cars.class, int idindatabase); // 如果我们对不同的汽车多做几次,我们将得到 相同的 Cars_Description_VALUE 对应于不同的汽车,所以它看起来像这样
2013-07-03 到 CarOne
2013-07-03 到 CarTwo
2013-07-03 到 CarTree
等等。所以我不需要每次都重复这个日期。
如何不让这个问题成为???谢谢
【问题讨论】:
-
不清楚是什么问题。您将汽车添加到 Date 的汽车集合中。数据库中只有一个日期,但使用多对多关系和连接表意味着每个关系都会导致一行添加到连接表中。如果汽车只能有一个创建日期(似乎很可能),您可以使用 1:m 并让汽车使用 1:1 来创建日期,以便它的表中有外键。或者直接将日期放在汽车实体中,而不用单独的表格。
-
先生,您几乎回答了我的问题。是的,我的车必须只有 1 个日期。但是,如果我将尝试将相同的日期添加到不同的汽车,则不必将日期添加到数据库中,因为它是相同的。为什么我必须添加它并将其复制到我的数据库中?正确的?而且我认为我搞砸了很多人只是因为我认为它不会每次都为每辆汽车添加相同的日期,它会让开发人员决定如何完成它。我认为声明 manytomany 只是为了更时尚的编程技术,从没想过它依赖于插入。那么JoinTable 呢?我必须使用它们吗?或者 FK 就够了。
标签: database hibernate jpa persistence hibernate-mapping