0

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

4

0 回答 0