Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在错误的键上进行休眠映射_Java_Xml_Hibernate_Mapping - Fatal编程技术网

Java 在错误的键上进行休眠映射

Java 在错误的键上进行休眠映射,java,xml,hibernate,mapping,Java,Xml,Hibernate,Mapping,我有两类设备和位置,它们之间有一对多/多对一的关系(一个设备有多个位置,一个位置与一个且仅一个设备关联) 我已在hibernate映射文件中明确指定,我希望我的表在device.DeviceID=position.FK_DeviceID上连接,但在执行以下HQL查询时: String queryString = "select position" + " from Position position join position.device d

我有两类设备和位置,它们之间有一对多/多对一的关系(一个设备有多个位置,一个位置与一个且仅一个设备关联)

我已在hibernate映射文件中明确指定,我希望我的表在device.DeviceID=position.FK_DeviceID上连接,但在执行以下HQL查询时:

String queryString =  "select position" 
                        + " from Position position join position.device device"
                        + " where device.MACAddress = '" + macAddress + "'";
我不断收到错误:
“错误:字段列表中的未知列'position0.'deviceID'”
,表示他试图加入“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;
专用整数设备id;
私有字符串地址;
私有字符串名称;
私人设定职位;
设备映射:

<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>


很抱歉写了这么长的文章,我真的不知道哪一部分错了。

在类位置的映射中,当您声明id时,您指定了一个名为deviceID的列,这有点奇怪,因为您应该有一个列位置id,因为您位于表位置

另一方面,您可以像这样轻松地进行连接:从位置p开始,p.device.macaddress='....'而不显式使用连接。

谢谢,确实是这个“deviceID”字段,这真是太愚蠢了。谢谢你简化了请求