我有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>
对不起,很长的帖子,我真的不知道哪个部分是错的。
答案 0 :(得分:0)
在类Position的映射中,当你声明id时,你指定了一个名为deviceID的列,这有点奇怪,因为你应该有一个PositionID列,因为你在表Position中。
另一方面,您可以轻松地像这样加入:从位置p,其中p.device.MACAddres =&#39; ....&#39;没有明确使用连接。