错误的froreign键

时间:2015-05-17 11:42:35

标签: java xml hibernate mapping

我有2个类设备和位置,它们具有一对多/多对一的关系(一个设备有多个位置,一个位置与一个且只有一个设备相关联。)

我已经在hibernate映射文件中明确指出我希望我的表在device.DeviceID = position.FK_DeviceID上加入,但是当我执行以下HQL查询时:

String queryString =  "select position" 
                        + " from Position position join position.device device"
                        + " where device.MACAddress = '" + macAddress + "'";

我不断收到错误:" ERROR: Unknown column 'position0_.deviceID' in 'field list' ",表示他尝试加入“deviceID”而不是“FK_deviceID”。

以下是类和映射文件:

位置:

private Integer positionID;
private Coordinate coordinate;
private Date timestamp;
private Device device;

设备:

private Integer deviceID;
private String MACAddress;
private String name;
private Set<Position> positions;

设备映射:

<hibernate-mapping>
<class name="fr.utbm.LO53_IPS.models.Device" table="device" catalog="bdd_LO53">
    <id name="deviceID" type="java.lang.Integer">
        <column name="deviceID" />
        <generator class="identity" />
    </id>
    <property name="MACAddress" type="string">
        <column name="MACAddress" length="45" not-null="true"/>
    </property>
    <property name="Name" type="string">
        <column name="Name" length="45" not-null="false" />
    </property>
    <set name="positions" cascade="all">
        <key column="FK_DeviceID"/>
        <one-to-many class="fr.utbm.LO53_IPS.models.Position" />
    </set>
</class>

位置映射:

<hibernate-mapping>
<class name="fr.utbm.LO53_IPS.models.Position" table="position" catalog="bdd_LO53">
    <id name="PositionID" type="java.lang.Integer">
        <column name="deviceID" />
        <generator class="identity" />
    </id>
    <property name="Timestamp" type="java.sql.Date">
        <column name="Timestamp" not-null="true"/>
    </property>
    <many-to-one name="device" column="FK_DeviceID" 
        class="fr.utbm.LO53_IPS.models.Device" not-null="true"/>
    <component name="Coordinate" class="fr.utbm.LO53_IPS.models.Coordinate">
        <property name="x" type="java.lang.Integer">
            <column name="x" not-null="true" />
        </property>
        <property name="y" type="java.lang.Integer">
            <column name="y" not-null="true" />
        </property>
    </component>
</class>

对不起,很长的帖子,我真的不知道哪个部分是错的。

1 个答案:

答案 0 :(得分:0)

在类Position的映射中,当你声明id时,你指定了一个名为deviceID的列,这有点奇怪,因为你应该有一个PositionID列,因为你在表Position中。

另一方面,您可以轻松地像这样加入:从位置p,其中p.device.MACAddres =&#39; ....&#39;没有明确使用连接。