【问题标题】:alternative way for many-to-many relationship in jpajpa中多对多关系的替代方法
【发布时间】:2011-03-17 11:20:12
【问题描述】:

如何在不使用jpa@manytomany注解的情况下编写多对多关系的代码?例如对于 SoftwareTags 两个类。当我删除标签时 - 它会删除所有软件。我尝试使用各种方法使用@manytomany 注释来做到这一点,但它不起作用。我在这个网站上看到了与我的问题类似的东西,但任何都给出了代码示例。 (我猜应该是@OneToMany两边的关系,不过拿个码就好了)。

或者如果可能的话,如何使用@manytomany

更多信息:如果我们有soft1,soft2 tag1和soft2 tag2,我们删除tag1,那么只有soft1应该被删除。 hibernate可以处理吗?

【问题讨论】:

  • 您的意思是要对多对多关系进行级联删除吗?
  • 也许它与 DELETE_ORPHAN 有关
  • 嗨!我也有同样的要求。我有@ManyToMany 关系。现在我需要的是,如果我删除 tag2,那么只有 tag2 和 tag_soft 表中的任何关联应该被删除,而 soft2 不应该被删除。如果我删除soft2,那么soft2和tag_soft表中的任何关联都应该被删除,但tag1和tag2不应该被删除。你能帮我吗?
  • 您应该手动查找和删除暗杀以解决约束 - 在您的对象中删除,然后 save() 更改,并且仅在此之后删除您的对象。您可能希望在一笔交易的背景下完成所有这些操作。

标签: hibernate jpa many-to-many


【解决方案1】:

试试

@org.hibernate.annotations.Cascade(
   {org.hibernate.annotations.CascadeType.PERSIST, 
    org.hibernate.annotations.CascadeType.MERGE, 
    org.hibernate.annotations.CascadeType.REFRESH, 
    org.hibernate.annotations.CascadeType.DETACH, 
    org.hibernate.annotations.CascadeType.DELETE_ORPHAN}
)

这是为了从级联中移除 org.hibernate.annotations.CascadeType.REMOVE 以避免出现以下情况

  • 您删除了 ID 为 5 的软件
  • hibernate 删除 id:5 和 7 的标签
  • 使用这些 ID 标记的所有软件行都将被删除,并且级联再次开始,因此您最终可能会得到一个空数据库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-07
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 2013-04-25
    • 1970-01-01
    • 2011-12-29
    相关资源
    最近更新 更多