我应该使用什么hibernate参数?

时间:2013-04-09 03:47:31

标签: hibernate one-to-many many-to-one hbm

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

0 个答案:

没有答案