如何使用Hibernate防止数据库中相同数据的填充

时间:2013-07-03 16:34:12

标签: database hibernate jpa persistence hibernate-mapping

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

让我们举个例子,

CarsCars_ID

的表Cars_VALUE
-=JoinTable between Cars and Cars_CreationDate=-

Cars_CreationDateCars_CreationDate_ID

的表Cars_CreationDate_VALUE
-=JoinTable between Cars_CreationDate and Cars_Description=-

Cars_DescriptionCars_Description_ID

的表Cars_Description_VALUE

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

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

在实体Cars_DescriptionCars @ManyToOne之间,关系的所有者是Cars实体,实体Cars_Description属于Cars。每次使用Cars_Description从数据库中提取实体CarsfetchType=EAGER

现在让我们看看我们是否已经在DataBase中创建了一些Cars并且我想为这些车添加新的日期我会说: Cars cars = (Cars)session.get(Cars.class, int idindatabase); //如果我们针对不同的汽车执行此操作的次数多一次,我们将相同 Cars_Description_VALUE对应不同的汽车,因此它看起来像这样

  

2013-07-03 to CarOne

     

2013-07-03 to CarTwo

     

2013-07-03 to CarTree

等等。所以我不需要每次都重复这个日期。

怎么不让这个问题成为???谢谢

1 个答案:

答案 0 :(得分:0)

我认为使用单独的实体/表存储单个值以避免必须将其写出来没有多大价值 - 汽车有日期或汽车有日期参考。我把日期记录在Car中并完成它。但从理论上讲,你想要的是Car中的外键来引用你的日期。每辆车都有一个日期ID,用于查找日期行/实体。然后你的日期对象可以有一个1:M的关系,所以他们可以拥有一系列汽车 在CarEntity:

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

在DateEntity中:

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