2012-09-04 45 views
0

在工作中,我一直在使用我們內部的ORM(2000年以前),我們正在考慮爲我們的java移動到另一個ORM解決方案,但有一些特定要求。有誰知道任何支持這些請求的表單或ORM?ORM繼承和裝飾器支持(休眠?)

  1. 支持的產業,在我們的Java,我們有相當深的繼承結構,目前如果我在「頂」添加屬性的類,那麼我必須手動編輯ORM過程(SQL)以爲每個子類添加新的類

  2. 對裝飾器表的支持:我們的一些類需要能夠存儲針對特定對象的任何(用戶提供的)屬性,目前這只是一個匹配的表Item Id添加到包含FieldName和FieldValue的行中,並將所有這些屬性作爲屬性提取。請參閱下面的更好的解釋。

  3. 對象持久性內置的,所以對象只能在請求時加載和寫入到數據庫或從數據庫寫入,否則留在內存中。也將是巨大的,如果任何變化可能,當你完成自動保存,而不必調用.save()

  4. 像往常一樣,易於使用(最好是(但潛在的危險?) - 這不就是我們都希望? )和良好性能

感謝您的時間,幸福與我們選擇和更新問題,爲什麼,我們發現了一些線索,同時實施!


的#2進一步解釋:

(請不要問爲什麼它是這樣的,改變是 「超出範圍」 這個項目的)

項目表:

ItemId | Type | Price 
-------|-------|------- 
1  | Mouse | 9.99 
2  | Dog | 12.99 

裝飾表:

ItemId | FieldName | Value 
-------|-----------|------- 
1  | Age  | 12 
2  | Breed  | Blue Long Hair 
2  | Name  | Fluffy 

Item對象:

Item1 
    ItemId -> 1 
    Type -> Mouse 
    Price -> 9.99 
    Age -> 12 

Item2 
    ItemId -> 2 
    Type -> Dog 
    Price -> 12.99 
    Breed -> Blue Long Hair 
    Name -> Fluffy 

回答

0
  1. JPA(並因此休眠)支持繼承。
  2. 我不太明白你的意思
  3. 默認情況下,JPA/Hibernate會在事務期間將對象留在內存中。每個事務都有自己的對象副本,並且在每個事務開始時重新創建此第一級緩存,因爲任何其他併發事務(或甚至另一個應用程序)都可能修改了該對象。 Java中沒有析構函數,所以我不明白你的意思。但在交易結束時,默認情況下,對實體的每次更改都會自動保存到數據庫中。
  4. 如果您閱讀文檔並花時間瞭解其工作原理,那麼JPA/Hibernate相對易於使用。但它有它的學習曲線。在95%的典型用例中,只要您瞭解ORM在幕後做了什麼,性能就可以。
+0

感謝您的詳細回覆。重新2.我們有一個類「項目」,可以有任何數量的屬性(由用戶提供),我們需要一個數據庫端的方式(因爲這是它如何工作,不能改變)接受這個項目上的任何領域。例如。它只定義了名稱和價格,但對於一個項目,我可以添加顏色 –

+0

已在上面添加更多信息 –

+0

Object1和Object2有哪些類型?這些類型有什麼共同之處?使用JPA映射上面的數據庫結構需要一個Item實體,並且具有與ItemField實體的OneToMany關聯。 ItemField實體將具有名稱字段和值字段。 –