DEVICEID という一意の ID を持つテーブル DEVICE があります。主キーがシーケンス DEVICEINFOSEQ である DEVICEINFO という 2 番目のテーブルがありますが、この情報テーブルには DEVICE を指す外部キーである DEVICEID フィールドもあります。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>
1 つのデバイスは Deviceinfo テーブルに 1 つのエントリしかありませんが、デバイスにはエントリがまったく必要ありません。すべてのデバイスにデバイス情報があるわけではありません。しかし、情報が存在する場合は、それを取得する必要があります。情報は別のソースから更新されており、この HBM は可能であれば更新を防止する必要があります。多対一は正しいですか?多分私は一対多を使うべきですか?
上記の HBM を使用すると、
org.springframework.dao.InvalidDataAccessResourceUsageException: クエリを実行できませんでした。SQL