gpt4 book ai didi

java - Spring hibernate ManyToMany 具有额外的字段

转载 作者:行者123 更新时间:2023-12-01 10:22:25 28 4
gpt4 key购买 nike

我正在开发一个演示项目,该项目具有连接多对多的驱动程序和许可证。驾驶员可以拥有多个许可证,一个许可证可以连接到多个驾驶员。这不是驾驶执照。我所说的许可证与他们可以或不能运输的 cargo 有关。事情应该如此。最近,我收到一个请求,要求在这方面添加两个额外的字段。驱动程序和许可证通过表 Drivers_License 连接为 ManyToMany。该额外的文件将转到 Drivers_License,即过期日期和状态已颁发。

这就是我的数据库现在的样子。

Driver                          Driver_License                   License
----------- ------------------- --------------------
driverID driverID licenseID
driverName licenseID licenseName
driverNumber expirationDate
driverDateOfBirth stateIssued

问题是我需要中断 ManyToMany 连接并创建两个 OneToMany 连接。我还需要根据 driverID 和 licenseID 生成复合 key 。

这就是我正在谈论的例子。 Hibernate Many-to-Many Association with Extra Columns in Join Table Example

您能告诉我是否有一些完整的示例如何使用 spring 和 hibernate 完成此操作,或者您是否知道一些可以通过经典方式使用 ManyToMany 来处理此问题的示例?

最佳答案

只要您自己创建架构,就不需要将字段添加到连接表。只需将它们添加到您的许可证实体即可。这将是您似乎正在尝试做的事情的近似值。

@Entity
public class Driver {
@Id @GeneratedValue private Integer id;
@OneToMany private List<License> licenses;
... Driver Name, Number, & DateOfBirth ...
}

@Entity
public class License {
@Id @GeneratedValue private Integer id;
private String licenseName;
// add your fields here.
@Temporal(TemporalType.DATE)
private Date expirationDate;
private String issueState;
}

同样,您不想弄乱连接表,它们通常是由持久性提供程序自动创建的。

Driver 表中的licenses 列表将引用一个 join 表,该表将保存一个驱动程序的多个许可证,因此 >OneToMany 关系。

编辑:如果您有特定的许可证并想找出它属于哪个驱动程序,比如说因为您已经通过其名称查找了它,那么您应该将引用添加回驱动程序:

@ManyToOne
private Driver driver;

这将是一个ManyToOne,因为您将拥有引用一个驱动程序的多个许可证。此关系将使用与 Driver 中的 licenses 列表相同的Join Table。这还会创建循环引用,Driver 引用 LicenseLicense 引用 Driver。您必须首先创建许可证,保存它们,创建驱动程序,添加许可证,保存它,然后合并 驱动程序插入许可证

    for(License license: licenses) {
em.persist(license);
}
Driver driver = new Driver();
driver.getLicenses().add(licenses);
em.persist(driver);
// merge circular dependency
for(License license: licenses) {
license.setDriver(driver);
em.merge(license);
}

好建议:您应该打开SQL输出并稍微使用一下应用程序,以了解它可以做什么以及如何做。查看所有实际操作将帮助您更好地了解其工作原理。我通常会制作一个简单的网页,其中包含创建、打印、删除等按钮,并观看调试输出。

关于java - Spring hibernate ManyToMany 具有额外的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35488933/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com