错误外键上的 HIbernate 映射
HIbernate mapping on the wrong froreign key
我有 2 个 类 设备和位置有关系 one-to-many/many-to-one(一个设备有多个位置,一个位置关联到一个且只有一个设备)。
我已经在休眠映射文件中明确指定我希望我的 table 加入 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>
抱歉这么久了post,我真的想不通哪里错了。
在 class 位置的映射中,当您声明 id 时,您正在指定一个名为 deviceID 的列,这有点奇怪,因为您应该有一个列 PositionID,因为您在 table位置。
另一方面,您可以像这样轻松加入:从位置 p where p.device.MACAddres='....' 无需显式使用加入。
我有 2 个 类 设备和位置有关系 one-to-many/many-to-one(一个设备有多个位置,一个位置关联到一个且只有一个设备)。
我已经在休眠映射文件中明确指定我希望我的 table 加入 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>
抱歉这么久了post,我真的想不通哪里错了。
在 class 位置的映射中,当您声明 id 时,您正在指定一个名为 deviceID 的列,这有点奇怪,因为您应该有一个列 PositionID,因为您在 table位置。
另一方面,您可以像这样轻松加入:从位置 p where p.device.MACAddres='....' 无需显式使用加入。