我必须使具有一对多关系的实体和表休眠。一个是用户,另一个是汽车对象。我相信差异在哪里,是我试图加入除父表的主键和子表的外键之外的字段。
例如,我的表格如下所示:
CREATE TABLE `User` (
`userId` int(32) NOT NULL,
`serial` varchar(32) NOT NULL,
PRIMARY KEY (`userId`) USING BTREE,
UNIQUE KEY `serial` (`serial`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `Car` (
`carId` int(32) NOT NULL,
`serial` varchar(32) NOT NULL,
PRIMARY KEY (`carId`) USING BTREE,
KEY `FK_USER_serial` (`serial`),
CONSTRAINT `FK_USER_serial` FOREIGN KEY (`serial`) REFERENCES `User` (`serial`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
我的映射是这样的:
用户映射:
<hibernate-mapping>
<class name="User" table="User">
<id name="userId" type="int">
<generator class="native" />
</id>
<property name="serial" type="string"></property>
<set name="cars" table="Car"
inverse="true" lazy="true" fetch="select">
<key>
<column name="serial" not-null="true" />
</key>
<one-to-many class="Car" />
</set>
</class>
</hibernate-mapping>
汽车测绘:
<hibernate-mapping>
<class name="Car" table="Car">
<id name="id" type="int">
<generator class="native" />
</id>
<property name="serial" type="string"></property>
</class>
</hibernate-mapping>
我在这些表中的值如下:
用户:userId=172 序列号=1
汽车:carId=159 序列号=1
carId=160 序列号=1
我在 log4j 中启用了跟踪级别日志记录,发现休眠尝试通过“串行”字段检索汽车,但在 172 的 where 子句中使用“userId”,而不是实际带回孩子的 1。
我可以在我的表或映射中更改什么以使休眠使用串行外键而不是 Car 表甚至没有的 userId。