我有一个 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