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