在使用hibernate对1对多这种模型进行操作时,总发现多方的外键不能保存,一直为空,百度后发现是inverse的配置错误
根据自己的测试,如下表所示:(1方配置inverse,多方不配置)
inverse | setMain | sql条数 | 数据库结果 |
true | set | 1条 | 正确 |
false | set | 2 | 正确 |
true | 未操作 | 1 | 明细表缺少外键 |
false | 未操作 | 2 | 正确 |
从上表中可以看出:
只有inverse==true,并且在多方未维护1方时,结果会出错。
其余条件下,均得到正确结果。
分析:
inverse指定由谁来维护外键关系,
如果==false,则由自己(1方)控制
生成sql语句会产生insert update 两条
如果==true,则由对方(多方)进行维护。
只会生成insert 1条语句,提高数据库效率
结论:
在1对多关联关系中,一般将多方设置为主控方(同时需要在多方维护关联关系), 这样将有助于改善性能,不需要在insert后再update,直接insert即可。
参考资料: