gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:27:50 25 4
gpt4 key购买 nike

我是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com