【问题标题】:Deleting an Entry in the join table of a Many-to-Many Relationship删除多对多关系连接表中的条目
【发布时间】:2015-05-31 12:47:25
【问题描述】:

使用文档中的示例:我有通过连接表连接的医生和患者。 现在我从医生那里删除了一个病人,效果很好,即连接表中的行消失了:

doctor.remove(patient);

有没有一种方法可以检索剩余的 (n-1) 名患者,而无需从数据库中重新加载 Doctor,即

doctor.getAll(Patient.class);

在不重新加载 Doctor 的情况下执行此操作时,我仍然会得到刚刚删除的条目。 缓存清除也不起作用。 只有当我也从数据库重新加载医生时,删除的条目才消失。 这是唯一可行的方法吗?

【问题讨论】:

    标签: many-to-many activejdbc


    【解决方案1】:

    这正是框架的工作原理。这段代码:

    doctor.remove(patient);
    

    从连接表中删除记录。之后,调用:

    doctor.getAll(Patient.class);
    

    不会返回已移除的患者。我通过在https://github.com/javalite/activejdbc/blob/master/activejdbc/src/test/java/org/javalite/activejdbc/Many2ManyRelationshipTest.java 中编写额外的测试方法对此进行了测试。

    这是我添加的测试:https://gist.github.com/ipolevoy/821e986c5c7deb28a90d 如您所见,第 9 行只有一名患者,因为在第 7 行删除了另一名患者。

    您可以打开日志记录:http://javalite.io/logging 以查看框架正在执行哪些语句。

    【讨论】:

    • 记录看起来不错。在您的代码中,我看到 Doctor 被缓存而 Patient 没有。这是故意的还是重要的?
    • 医生被缓存用于不同的测试。在你的情况下,这并不重要。
    • 真的很奇怪。请在您的新要点下方查看我的 cmets。
    • @valley,我对要点发表了评论。如果您可以编写一个重现您的问题的程序,请随时打开一个问题:github.com/javalite/activejdbc/issues
    猜你喜欢
    • 2021-05-10
    • 1970-01-01
    • 2019-12-20
    • 2021-07-12
    • 2017-07-13
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多