我有一个表DEVICE,其唯一ID为DEVICEID。我有一个名为DEVICEINFO的第二个表,它的主键是序列DEVICEINFOSEQ,但是这个信息表还有一个DEVICEID字段,它是一个指向DEVICE的外键。在DEVICE HBM中,我有以下的deviceinfo
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping default-lazy="true"
package="com.xxx.xxx.xxx">
<class name="Device" table="DEVICE" dynamic-update="true">
<id name="dString" column="DEVICEID" type="java.lang.String"
unsaved-value="null" length="9">
<generator class="assigned"/>
</id>
....
<many-to-one name="deviceInfo" class="DeviceInfo"
outer-join="true" foreign-key="deviceId" >
</many-to-one>
我的设备信息hbm如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping default-lazy="true" package="com.xxx.xxx.xxx">
<class name="DeviceInfo" table="DEVICEINFO" dynamic-update="true">
<id name="id" column="DID" type="integer">
<generator class="native">
<param name="sequence">DEVICEINFOSEQ</param>
</generator>
</id>
<property name="deviceId" column="DEVICEID" type="string"
length="32">
</property>
<property name="somefield" column="SOMEFIELD" type="string" length="30" />
</class>
一个设备在Deviceinfo表中只有1个条目,但设备根本不需要输入。并非所有设备都有设备信息。但如果信息存在,我们必须检索它。信息从另一个来源更新,如果可能的话,这个HBM实际上应该阻止任何更新。多对一是否正确?也许我应该使用一对多?
如果我使用上面的HBM,我会得到
org.springframework.dao.InvalidDataAccessResourceUsageException:无法执行查询; SQL