2013-07-03 45 views
0

我正在做我自己的項目,並且有一些東西要存儲在mysql數據庫中。 想到什麼應該是最好的解決方案之後不要在DataBase中重複同樣的值,我沒有找到答案。如何使用Hibernate修復DataBase中相同數據的數量

因此,讓我們的榜樣,

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提取數據庫實體Cars_DescriptionfetchType=EAGER

現在讓我們看看,如果我們在數據庫中的一些Cars已經做出,我想新的日期到這個車,我會說: Cars cars = (Cars)session.get(Cars.class, int idindatabase); //如果我們這樣做了幾次更針對不同的汽車,我們將有THE SAMECars_Description_VALUE對應於不同的汽車所以它會看起來像這樣

2013年7月3日至蒈

2013年7月3日至CarTwo

2013-07-03到CarTree

等。所以我不需要每次重複這個日期。

如何不讓這個問題?謝謝

+0

它不清楚是什麼問題。您將汽車添加到日期的汽車集合中。數據庫中只有一個日期,但與連接表使用ManyToMany關係意味着每個關係都會將一行添加到連接表中。如果汽車只能有一個創建日期(看起來很可能),那麼可以使用1:m並讓汽車對creationDate使用1:1,以便它的表中有外鍵。或者直接將日期放在汽車實體中,而不用單獨的表格。 – Chris

+0

先生,你幾乎回答我的問題。是我的車只有一個日期。但是,如果我會嘗試將相同的日期添加到不同的汽車,那麼不需要將日期添加到數據庫,只是因爲它是同一個日期。爲什麼我必須添加它並將其複製到我的數據庫中?對?我認爲我很多事情都是因爲我認爲它不會爲每輛車添加相同的日期,它會讓開發者決定如何完成它。我以爲只是爲了更時尚的編程技術而宣稱許多東西,從來沒有想過它取決於插入。那麼JoinTable怎麼樣?我必須使用它們嗎?或者FK更多。 –

回答

0

我沒有看到使用單獨的實體/表來存儲單個值以避免寫出它們 - 汽車有一個日期或汽車有一個日期的參考很多值。我會把這個日期放在車裏,並且用它來完成。但從理論上講,你想要的是Car中的外鍵來引用你的日期。每輛車將有一個日期ID用於查找日期行/實體。然後,您的日期對象可以返回1:M關係,因此它們可以擁有一組汽車。
在CarEntity:

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

在DateEntity:

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

謝謝你的解釋。我想要OnetoMany和ManytoOne之間的汽車和日期和爵士之間的Biderectional關係,如果我不能在集合中添加所有實體,如果我不能將它們添加到集合中並保存每個實體在收集。它會將它添加到同一日期嗎?因爲我認爲我必須通過id獲取Date類,並且在具有特定ID的商店Car in Date之後。對?您看到問題是我將Car添加到特定的日期,並且在我將Car添加到同一個名稱到不同的日期之後,現在它將在數據庫中填充我的相同車名。 –

相關問題