2011-10-27 27 views
0

我正在使用一個項目,我需要在hibernate中存儲一個對象,並且它包含許多用戶定義的對象。我知道如何使用Hibernate映射與只包含「ususal」類型(int,String等),但與自定義類型的對象我見過的建議,如使用註釋@嵌入和實現UserType,但我沒有'沒有看到有關如何簡單地將對象內的對象映射到某個表的建議。注意:這些對象不在同一個表中,只在同一個數據庫中。我想要做的是有一個映射,允許此功能在我DaoImplementation:如何將Hibernate與映射到不同DB的自定義字段類型一起使用?

public void store(MyObject o){ 
hibernateTemplate.saveOrUpdate(o); 
} 

這是軟的我物體的外觀:

public class MyObject{ 

private String name; 

private ObjectA type;//Contains an int 

private ObjectC look;//Contains a String. 

private ObjectB[] children;//contains a string and other children. 

public MyObject(){} 

//Getters and setters omitted. 

} 

public class ObjectB{ 
private String name; 
private ObjectB[] children; 

public ObjectB(){} 
//Getters setters omitted 
} 

回答

1

如果需要存儲在單獨的表中的某些對象的內容,那麼這個對象應該是另一種持久的實體,您應該使用實體之間的關聯:一對多,多對一,OneToOne,多對多,根據不同的基數。

閱讀hibernate reference manual

+0

我一直在嘗試這個,但有一個問題。孩子是否必須有一個存儲父母的字段?看看這個例子:http://www.mkyong.com/hibernate/hibernate-one-to-many-relationship-example/ 它看起來不錯,但問題是,股票有幾個StockDailyRecords,但StockDailyRecord需要有一個股票領域。看起來很醜陋,在我目前的項目中,我不允許在類中添加字段。任何關於解決問題的想法?在手冊中沒有看到任何人。 –

+0

子對象不必具有父項的字段(當然,它們映射到的表仍需要具有父項ID的列)。只是不要在父類中指定一對多的關係爲逆。 – socha23

+0

@why_vincent:你想要的是一種單向OneToMany關係。手冊確實有這種關係的例子。仔細閱讀。 –

0

你應該寫的類對象B正常的實體映射(與您映射MyObject的方式相同),將其映射到您選擇的表,並定義MyObject和ObjectB之間的一對多關係。 saveOrUpdate保存傳遞對象及其所有字段,因此ObjectB的數組也將被保存。對於ObjectA或ObjectC,您可以實現一個UserType或將它們標記爲@Embedded(如果您希望它們的字段位於同一個表中的MyObject字段),或者將它們映射爲另一個表的實體(如ObjectB的情況下)。

+0

因爲它們不屬於同一張表,所以我不得不使用UserType,但是看起來好看的hibernate代碼在我看來會開始看起來不好,我不如使用Spring/JDBC。 –

+0

如果它們不屬於同一個表格,那麼在編寫UserType時不要麻煩自己,只需將所有對象映射爲實體到不同的表格,指定關係,並且一切都應該正常工作。 – socha23

相關問題