1
我也有類似的這三個表:的Hibernate映射一個外鍵列到多個表
vehicles
- id1
- id2
- vehicle_type_id
- vehicle_detail_id
- primary key(id1, id2)
buses
- id
...
cars
- id
...
vehicleTypeId決定了車輛的類型,也從表中vehicleDetails是要被取出。參加車輛的vehicleDetailId和特定車輛類型的id。 我創建的類是這樣的:
class Vehicle{
VehiclePk pk;
Long vehicleTypeId;
Long vehicleDetailId;
}
class Bus extends Vehicle{
Long id;
}
class Car extends Vehicle{
Long id;
}
class VehiclePk {
private Long id1;
private Long id2;
@Override
public boolean equals(Object obj) {
if(obj != null && obj instanceof VehiclePk) {
VehiclePk p = (VehiclePk)obj;
return id1.equals(p.id1) && id2.equals(p.id2);
}
return false;
}
@Override
public int hashCode() {
return (id1 + id2).hashCode();
}
}
我試圖在Hibernate映射文件合併和元素,運用鑑別:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping schema="test_db">
<class name="Vehicle" table="vehicles" discriminator-value="0">
<composite-id name="pk" class="VehiclePK">
<key-property name="id1" column="id1" type="long"/>
<key-property name="id2" column="id2" type="long"/>
</composite-id>
<discriminator column="vehicle_type_id" type="long"/>
<property name="vehicleDetailId" column="vehicle_detail_id" type="long"/>
<subclass name="Bus" discriminator-value="1">
<join table="vehicles" >
<key column="vehicle_detail_id" />
...
</join>
</subclass>
<subclass name="Car" discriminator-value="2">
<join table="vehicles" >
<key column="vehicle_detail_id" />
...
</join>
</subclass>
</class>
也有一些是錯誤的映射文件,作爲數據庫沒有被初始化。請讓我知道,如果我錯過了什麼。謝謝。
UPDATE : It gives ArrayIndexOutOfBoundsException: 1
Stacktrace :
...
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1206)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1026)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4421)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4734)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:943)
at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:778)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:504)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1385)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:306)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1389)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1653)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1662)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1642)
at java.lang.Thread.run(Thread.java:662)
沒有錯誤日誌可用?有沒有好的理由不使用註釋? –
更新錯誤日誌。尚未探索註釋。想要如何實現使用映射 – jyothiv
它是整個堆棧跟蹤? –