2012-01-05 67 views
4

我對Hibernate相當陌生,需要一些Hibernate映射的幫助。Hibernate使用hbm.xml將多個類映射到一個表

我有4個不同的類,我想映射到一個表中,其中主鍵由來自2個不同類的屬性組成。同時,我只想將每個類的選定屬性映射到本地數據庫中。我希望避免JPA批註並改爲在hbm.xml文件中定義映射樣式。我怎麼做?

採取下面的例子:

public class Tenant implements Serializable { 
    private final static long serialVersionUID = 1L; 
    protected List<Rack> rack; 
    protected String type; 
    //getters setters 
} 

public class Rack implements Serializable { 
    private final static long serialVersionUID = 1L;   
    protected List<Circuit> circuit; 
    protected String rackLabel; 
    protected Boolean excludes; 
    //getters setters 
} 

public class Circuit implements Serializable { 
    private final static long serialVersionUID = 1L; 
    protected List<CircuitReadings> circuitReadings; 
    protected String circuitNo; 
    protected Boolean excludes; 
    //getters setters 
} 

public class CircuitReadings 
    implements Serializable { 
    private final static long serialVersionUID = 1L; 
    protected String date; 
    protected String kva; 
    protected String current; 
    protected String kwh; 
    //getters setters 
} 

和最終表應包括以下的:以上

type | rackLabel | circuitNo | date | kva | current | energy 

「circuitNo」和「日期」應形成複合主鍵。

有人可以告訴我如何映射這個例子嗎?謝謝!

+1

爲什麼要在一個表中添加所有四個類?從他們看的方式來看,所有班級之間都有多對一的關係。將它們全部添加到單個表格中將產生非標準化的表格。這在關係數據庫中通常是一件壞事。 – 2012-01-05 07:07:44

+0

這是因爲我不想將所有屬性存儲到數據庫,並且只需要選定的屬性。我想要的屬性在上面的表格描述中突出顯示。我的解決方案是創建一個單獨的方法,循環訪問「Tenant」對象及其子類,並僅將要存儲到數據庫中的值合併到獨立的類中,例如ClassA的。然後爲ClassA創建一個hbm文件。我知道這樣做並不理想,因此,我正在尋找更優化的解決方案。 – 2012-01-13 07:25:53

回答

0

沒有什麼能阻止你這樣做。創建4個指向同一個表但不同Pojos的HBM。雖然可以這樣做,但我不推薦使用@Ioan Alexandru Cucu。

<!-- HBM1--> 

<class name="com.myProject.Rack" 
    table="My_Table"> 

    <!-- HBM2--> 

    <class name="com.myProject.Rack" 
    table="My_Table"> 
+1

我試圖理解這將如何工作。回過頭來看我的例子,我如何在hbm中指定我想爲「CircuitReadings」列表中的每個「日期」,「kva」,「當前」和「能量」重複相同的「circuitNo」? – 2012-01-13 07:32:41

1

Hibernate提供了一種使用鑑別符關鍵字映射子類的方法。

<class name="Payment" table="PAYMENT"> 
    <id name="id" type="long" column="PAYMENT_ID"> 
     <generator class="native"/> 
    </id> 
    <discriminator column="PAYMENT_TYPE" type="string"/> 
    <property name="amount" column="AMOUNT"/> 
    ... 
    <subclass name="CreditCardPayment" discriminator-value="CREDIT"> 
     <join table="CREDIT_PAYMENT"> 
      <key column="PAYMENT_ID"/> 
      <property name="creditCardType" column="CCTYPE"/> 
      ... 
     </join> 
    </subclass> 
    <subclass name="CashPayment" discriminator-value="CASH"> 
     <join table="CASH_PAYMENT"> 
      <key column="PAYMENT_ID"/> 
      ... 
     </join> 
    </subclass> 
    <subclass name="ChequePayment" discriminator-value="CHEQUE"> 
     <join table="CHEQUE_PAYMENT" fetch="select"> 
      <key column="PAYMENT_ID"/> 
      ... 
     </join> 
    </subclass> 
</class> 
相關問題