【问题标题】:How to privent population of same data in DataBase with Hibernate如何使用 Hibernate 防止在数据库中填充相同的数据
【发布时间】:2013-07-01 11:10:54
【问题描述】:

我正在做我自己的项目,并且有一些东西要存储在 mysql 数据库中。 在考虑什么应该是最好的解决方案之后,不要在数据库中重复相同的值,我没有找到答案。

举个例子,

Cars 与行 Cars_IDCars_VALUE

-=JoinTable between Cars and Cars_CreationDate=-

Cars_CreationDate 与行 Cars_CreationDate_IDCars_CreationDate_VALUE

-=JoinTable between Cars_CreationDate and Cars_Description=-

Cars_Description 与行 Cars_Description_IDCars_Description_VALUE

在休眠实体中,我会有这样的关系:

在实体Cars_CreationDateCars @ManyToMany 之间,关系的所有者是Cars_CreationDate。因为一个日期可以做很多Cars,一个日期可以有很多车。

在实体Cars_DescriptionCars@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


【解决方案1】:

我认为使用单独的实体/表来存储单个值以避免必须写出它们没有多大价值 - 汽车有日期或汽车有日期的引用。我会把日期放在 Car 中并完成它。但理论上,您想要的是 Car 中的外键来引用您的日期。每辆车都有一个日期 ID,用于查找日期行/实体。然后,您的日期对象可以返回 1:M 关系,因此它们可以拥有汽车集合。
在 CarEntity 中:

  @ManyToOne
  @JoinColumn(name="CREATIONDATE_ID"
  DateEntity creationDate;

在 DateEntity 中:

  @OneToMany(mappedby="creationDate")
  Collection<CarEntity> cars;

【讨论】:

  • 感谢您的解释。我想要 Car 和 Date 和 Sir 之间的 OnetoMany 和 ManytoOne 双向关系,如果我无法将所有实体按一个添加到 Collection 中怎么办?如果我将一个一个一个一个地添加到集合中并保存每个实体会怎样在收藏中。是否会将其添加到同一日期。因为我认为我必须通过 id 获取 Date 类,然后将 Car 存储在具有特定 ID 的 Date 中。正确的?您会看到问题是我会将汽车添加到特定日期,然后我还将具有相同名称的汽车添加到不同的日期,现在它将在数据库中填充我相同的汽车名称。
猜你喜欢
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
  • 2015-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2011-01-12
相关资源
最近更新 更多