[英]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.