gpt4 book ai didi

java - JPA Hibernate ManyToMany、级联和 FK

转载 作者:行者123 更新时间:2023-11-29 17:37:08 26 4
gpt4 key购买 nike

我正在将项目的数据库管理从 JDBC MySQL 转换为 JPA Hibernate,数据库应该保持不变。(从简单的 Jersey API 到带有 Hibernate api 的 Spring)。

公司客户优惠券表格。每个公司可以管理许多优惠券,每个客户也可以“购买”许多优惠券

因此,我有一个名为 company_coupon 的联接表和另一个名为 customer_coupon 的表。
删除公司时,如果优惠券不属于任何其他公司(因此没有经理)- 优惠券将被删除,并且因此,所有关系(company_couponcustomer_coupon)也是如此。

当删除客户时, coupon_customer 中的关系也应该被删除。

在我看来,这就像一个OneToMany关系,因为优惠券不必知道他的所有者是谁,(公司管理优惠券,客户拥有优惠券) ,但我发现的有关 JPA Hibernate 和连接表的所有内容都表明这是一个ManyToMany关系,这让我感到困惑。

如何定义我在 JPA Hibernate 中描述的内容?

<小时/>

此外,我曾经拥有所有内容的存档表,同时从原始表中删除它们。这可能会让处理事情变得困惑。
因此,我为每个实体添加了一个“已删除”字段,并配置了实体的删除函数,以将其已删除状态更改为 true:

@SQLDelete(sql = 
"UPDATE " + TableHelper.TBL_COMPANY
+ " SET " + TableHelper.REMOVED + " = true"
+ " WHERE " + TableHelper.COMPANY_KEY + " = ?")

现在,如果您尝试删除公司,则只会更改“已删除”值。
但我希望所有未管理的优惠券(与任何现有的未存档公司没有关系)也能存档。

管理数据的过程非常复杂......知道如何有效地做到这一点吗?

提前致谢:)

最佳答案

everything I found regarding JPA Hibernate and join tables points to this being a ManyToMany relatiopship

“每家公司都可以管理许多优惠券”并且“如果优惠券不属于任何其他公司(= 优惠券可能属于多个公司) ' 暗示Coupon - Company 是一个多对多关联。 “优惠券不必知道他的所有者是谁”这一事实只告诉您它可能应该是一个单向关联。

When a Customer is deleted, the relationship in coupon_customer should also be deleted.

如果 Customer 是关系的拥有方(并且由于您无论如何都希望使其成为单向关联,因此您实际上没有任何其他选择),这将自动发生。只需将 Customer.coupons 声明为多对多关联,如下所示:

@ManyToMany
@JoinTable(name = "customer_coupon", joinColumns = ..., inverseJoinColumns = ...)
private Set<Coupon> coupons;

When a Company is deleted, if the Coupon isn't owned by any other Company –thus has no manager– the Coupon is deleted, and as a result so are all the relationships (company_coupon and customer_coupon).

JPA 不会为您处理此事。您的应用程序需要检测和处理这种情况,作为其业务逻辑的一部分(这可能听起来像是潜在的性能问题,但话说回来,一家公司实际上多久会被删除?)

关于java - JPA Hibernate ManyToMany、级联和 FK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50200426/

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