2010-02-02 88 views
0

可能重複:
Hibernate: different object with the same identifier value was already associated with the session將具有相同標識符的對象保存到同一會話中的數據庫中嗎?

我有通過許多連接到一個realtionship 2個entiies。

許多[類別] ---------酮[遊戲]

idgame ------------------- --- gameid
類別------------------遊戲名稱

我需要在realtionship的category部分有很多遊戲主鍵的時機。我曾嘗試在會話中做到這一點,但我得到的錯誤。 「具有相同標識符值的不同對象已與會話相關聯:[org.POJO.Category#1]」。

我想我的配置文件是錯誤的,但我可能錯了。繼承我的代碼。

try{ 
     SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 
     session = sessionFactory.openSession(); 
      //Create new instance of Contact and set 
     Transaction tx = session.beginTransaction(); 
     Game gam = new Game(); 

     gam.setgenre(game.getString("genre")); 
     gam.setgname(game.getString("game_name")); 
     gam.setplatform(game.getString("platform")); 
     gam.setdescription(game.getString("description")); 

     session.saveOrUpdate(gam); 

     session.update(gam); 
     JSONObject cate = game.getJSONObject("Category"); 

     int gid = gam.getgameid(); 

     Category cat1 = new Category(); 

     cat1.setgameid(gid); 
     cat1.setcategory(cate.getString("Category1")); 

     session.save(cat1); 


     Category cat2 = new Category(); 

     cat2.setgameid(gid); 
     cat2.setcategory(cate.getString("Category2")); 

     session.save(cat2); 

我的配置文件的類別。它的XML。

-hibernate-mapping- 

-class名稱= 「org.POJO.Category」 表= 「類別」 -

-id名稱= 「遊戲ID」 列= 「Game_idGame」 -

-/ID-

-property 名稱= 「類別」 欄 = 「類別」/ -

- /類 - - /休眠-mapping-

sdfdsfsdfsdf

回答

3

標識符(id)在邏輯上(和技術上)等於主鍵。不能有兩個具有相同主鍵的對象,因此不能有兩個具有相同標識符的對象。

關係表的主鍵唯一標識表中的每條記錄。

如果需要兩個對象具有相同的主鍵,有什麼不對您的設計。

0

類別不能使用gameid作爲主鍵。它需要有自己的主鍵。遊戲ID將是遊戲表中引用遊戲ID的外鍵。

+0

非常感謝你們的幫助。 – Shino88

0

你已經選擇了很多gameid-s。主鍵旨在唯一標識表中的每個實體(行),而不是關聯的實體。因此,你應該在類別中有一個類別ID,並且在idgame上有一個簡單的索引。

相關問題