首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA Hibernate ManyToMany,级联和FK

JPA Hibernate ManyToMany,级联和FK
EN

Stack Overflow用户
提问于 2018-05-06 13:49:56
回答 1查看 56关注 0票数 0

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

公司Customer优惠券的表格。每一家公司都可以管理,许多优惠券,,每个客户也可以‘购买’,许多优惠券

因此,我有一个名为company_coupon的联接表和另一个名为customer_coupon.的表。

当一个公司被删除时,如果优惠券不是任何其他公司拥有的,那么(company_couponcustomer_coupon).的所有关系都会被删除-优惠券被删除

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

在我看来,这似乎是一种OneToMany关系,因为优惠券不需要知道他的所有者是谁(一家公司管理优惠券,一位客户拥有优惠券),但我发现的关于JPA Hibernate和join表的一切都表明,这是一种ManyToMany关系,这让我感到困惑。

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

另外,我以前在从原始表中删除存档表的同时,也为所有内容提供了存档表。这可能会让处理东西变得很麻烦。

因此,我向每个字段添加了一个“已删除的”字段,并配置了实体的delete函数,通过以下方式将其删除状态更改为true:

代码语言:javascript
复制
@SQLDelete(sql = 
        "UPDATE " + TableHelper.TBL_COMPANY 
        + " SET " + TableHelper.REMOVED + " = true"
        + " WHERE " + TableHelper.COMPANY_KEY + " = ?")

现在,如果您试图删除一个公司,则只会更改'removed‘值。

但我希望所有未管理的-without与现有的、未存档的公司建立关系的所有优惠券也能存档。

非常复杂的过程只是为了管理数据..。有什么想法吗?如何有效地做到这一点?

(预先谢谢:)

EN

回答 1

Stack Overflow用户

发布于 2018-05-06 19:31:29

我发现的关于JPA、Hibernate和join表的所有信息都表明这是一种ManyToMany关系。

“每个公司都可以管理多个优惠券”和“如果优惠券不属于任何其他公司(=一张优惠券可能属于多家公司)”暗示着Coupon - Company是一个多对多的协会。“优惠券不一定要知道他的主人是谁”这一事实只会告诉你,这可能是一个单向的关联。

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

这将自动发生,前提是Customer是关系的拥有方(而且由于您希望使它成为一个单向关联,所以您实际上没有任何其他选项)。只需将Customer.coupons声明为多到多的关联,如下所示:

代码语言:javascript
复制
@ManyToMany
@JoinTable(name = "customer_coupon", joinColumns = ..., inverseJoinColumns = ...)
private Set<Coupon> coupons;

当公司被删除时,如果优惠券不属于任何其他公司,-thus就没有经理--优惠券被删除,因此所有的关系(company_coupon和customer_coupon)都被删除了。

JPA不会帮你处理的。您的应用程序需要检测和处理这样的场景,将其作为业务逻辑的一部分(这听起来可能是一个潜在的性能问题,但话又说回来,一家公司究竟多久会被删除一次?)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50200426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档