簡體   English   中英

Hibernate使用hbm.xml將多個類映射到一個表

[英]Hibernate mapping multiple classes to one table using hbm.xml

我對Hibernate相當陌生,需要一些有關hibernate映射的幫助。

我有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”和“ date”應構成復合主鍵。

有人可以告訴我如何映射此示例嗎? 謝謝!

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

<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>

沒有什么可以阻止您這樣做的。 創建4個HBM,它們指向同一張桌子但不同的Pojos。 盡管可以做到,但是@Ioan Alexandru Cucu卻不建議這樣做。

   <!-- HBM1-->

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

   <!-- HBM2-->

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM