java - Hibernate 使用 hbm.xml 将多个类映射到一个表

标签 java hibernate jakarta-ee mapping hibernate-mapping

我是 Hibernate 的新手,需要一些关于 hibernate-mapping 的帮助。

我有 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 提供了一种使用鉴别器关键字映射子类的方法。

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

关于java - Hibernate 使用 hbm.xml 将多个类映射到一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8738761/

相关文章:

java - 如何统计广告点击量并存入数据库

java - 与mysql、hibernate、tomcat7连接出错

java - 使用其他模块的 spring bean?

java - 如何在不将文件保存到磁盘的情况下打开文件

java - 仅将最后一行打印到文本文件,而不是 java 中的其余行

java - hibernate下什么时候需要实现Hashcode和Equals?

java - hibernate中的自引用实体会导致StackOverflowErrors

jsp - IDE 或 JSP 中的 CRUD 实用程序

java - 有没有开源的完整的Java EE MDA框架?

java - appengine-api-1.0-sdk-1.7.6.jar 不是目录