我正在将项目的数据库管理从JDBC MySQL转换为JPA,数据库应该保持不变。(从简单的泽西岛API到使用Hibernate api的Spring )。
有公司、Customer和优惠券的表格。每一家公司都可以管理,许多优惠券,,每个客户也可以‘购买’,许多优惠券。
因此,我有一个名为company_coupon的联接表和另一个名为customer_coupon.的表。
当一个公司被删除时,如果优惠券不是任何其他公司拥有的,那么(company_coupon和customer_coupon).的所有关系都会被删除-优惠券被删除
当客户被删除时,coupon_customer中的关系也应该被删除。
在我看来,这似乎是一种OneToMany关系,因为优惠券不需要知道他的所有者是谁(一家公司管理优惠券,一位客户拥有优惠券),但我发现的关于JPA Hibernate和join表的一切都表明,这是一种ManyToMany关系,这让我感到困惑。
如何定义我在JPA中描述的内容?
另外,我以前在从原始表中删除存档表的同时,也为所有内容提供了存档表。这可能会让处理东西变得很麻烦。
因此,我向每个字段添加了一个“已删除的”字段,并配置了实体的delete函数,通过以下方式将其删除状态更改为true:
@SQLDelete(sql =
"UPDATE " + TableHelper.TBL_COMPANY
+ " SET " + TableHelper.REMOVED + " = true"
+ " WHERE " + TableHelper.COMPANY_KEY + " = ?")现在,如果您试图删除一个公司,则只会更改'removed‘值。
但我希望所有未管理的-without与现有的、未存档的公司建立关系的所有优惠券也能存档。
非常复杂的过程只是为了管理数据..。有什么想法吗?如何有效地做到这一点?
(预先谢谢:)
发布于 2018-05-06 19:31:29
我发现的关于JPA、Hibernate和join表的所有信息都表明这是一种ManyToMany关系。
“每个公司都可以管理多个优惠券”和“如果优惠券不属于任何其他公司(=一张优惠券可能属于多家公司)”暗示着Coupon - Company是一个多对多的协会。“优惠券不一定要知道他的主人是谁”这一事实只会告诉你,这可能是一个单向的关联。
当客户被删除时,coupon_customer中的关系也应该被删除。
这将自动发生,前提是Customer是关系的拥有方(而且由于您希望使它成为一个单向关联,所以您实际上没有任何其他选项)。只需将Customer.coupons声明为多到多的关联,如下所示:
@ManyToMany
@JoinTable(name = "customer_coupon", joinColumns = ..., inverseJoinColumns = ...)
private Set<Coupon> coupons;当公司被删除时,如果优惠券不属于任何其他公司,-thus就没有经理--优惠券被删除,因此所有的关系(company_coupon和customer_coupon)都被删除了。
JPA不会帮你处理的。您的应用程序需要检测和处理这样的场景,将其作为业务逻辑的一部分(这听起来可能是一个潜在的性能问题,但话又说回来,一家公司究竟多久会被删除一次?)
https://stackoverflow.com/questions/50200426
复制相似问题