java Spring使用额外的字段让很多人冬眠
我正在做一个演示项目,它的驱动程序和许可证连接了很多。驾驶员可以拥有更多驾照,一个驾照可以连接到更多驾驶员。这不是驾驶执照。我所说的许可证与他们可以或不能运输的货物有关。应该是这样的。 最近,我有一个请求,在这个连接中添加两个额外的字段。驱动程序和许可证通过表Drivers\u License连接很多。额外的文件将被提交给驾照,即到期日,并由州政府颁发
这是我现在数据库的外观
Driver Driver_License License
----------- ------------------- --------------------
driverID driverID licenseID
driverName licenseID licenseName
driverNumber expirationDate
driverDateOfBirth stateIssued
问题是我需要断开多个连接,创建两个一个一个的连接。我还需要由driverID和licenseID制作的复合密钥
这就是我所说的例子。 Hibernate Many-to-Many Association with Extra Columns in Join Table Example
你能告诉我是否有一些完整的例子如何使用spring和hibernate来完成这项工作,或者你知道一些例子可以通过经典的方式使用ManyToMany来处理这个问题吗
# 1 楼答案
只要您自己创建模式,就不需要将字段添加到
join table
。只需将它们添加到您的许可证Entity
。这将是一个近似的你似乎要做的事情及
同样,您也不想弄乱
join table
,它们通常是由持久性提供程序自动创建的Driver
表中的licenses
列表将引用一个为一个驱动程序持有多个许可证的join table
,因此是OneToMany
关系编辑:如果你有一个特定的驾照,想知道它属于哪一个驾驶人,比如说因为你查了它的名字,那么你应该添加一个对该驾驶人的引用:
这将是一个
ManyToOne
,因为您将拥有多个涉及一个驱动程序的许可证。此关系将使用与Driver
中的licenses
列表相同的Join Table
。这也将创建一个循环引用,Driver
指License
,License
指Driver
。您必须首先创建Licenses
,保存它们,创建Driver
,添加许可证,保存它,然后merge
将Driver
放入License
好建议:你应该打开
SQL
输出,稍微玩一下应用程序,了解它能做什么,以及它是如何做的。看到每一件事都在起作用会帮助你更好地了解它是如何运作的。我通常用创建、打印、删除等按钮制作一个简单的网页,并观看调试输出# 2 楼答案
好的。就像我承诺的,这是我的解决方案。尼古拉斯帮我解决了实体组织中的一些问题,还有更多问题
对于我的特殊问题,我选择了这个:http://www.codejava.net/frameworks/hibernate/hibernate-many-to-many-association-with-extra-columns-in-join-table-example
这解决了hibernate的工作问题。我还使用DTO重新包装豆子。这里的这个例子有一个错误,那就是他们没有在复合ID创建中使用LAZY。这就是为什么这个例子有无限循环问题
这是我解决这个问题的代码
驱动程序实体
DriverLicenseID(我的复合密钥)
许可证实体
谢谢你,尼克!你们帮助我理解了实体的概念,还有更多。全新的风格