【问题标题】:ActiveJdbc update join-table attributeActiveJdbc 更新连接表属性
【发布时间】:2023-03-10 12:49:01
【问题描述】:

晚上好, 我正在尝试更新现有记录的连接表属性。我有两个模型,一个叫Records,另一个叫Shoppingcarts。它们通过名为records_shoppingcarts 的连接表连接。我在连接表中添加了一个名为record_amount 的关系属性,它应该保存连接表中每条记录的数量。 目前,每当将一个项目添加到购物车时,只会添加一个项目。然后,用户可以在他们的结账视图中修改购物车中的商品数量。我通过查询连接表records_shoppingcarts 以获取具有相应record_id 的条目并将列record_amount 更新为购物车中的新记录数量来处理此问题。这看起来有点链接:

List<RecordsShoppingcarts> associations = RecordsShoppingcarts.where("shoppingcart_id = ?", s.get("id"));

            //update the number of records in the join table
            for(RecordsShoppingcarts rs : associations) {                    

                if((int)rs.getInteger("record_id") == (int)rec.getInteger("id")) {
                    rs.delete(); //cleanup
                    rs.set("record_amount", amount);
                    rs.saveIt();                        

                }
            }                
        }

不幸的是,每当saveIt() 被调用时;该条目未在数据库中更新,但使用相同的shoppingcart_idrecordId 和更新的金额创建了一个新条目。我可能在这里遗漏了一些东西,因为我无法想象手动更新连接表是有意的。不幸的是,我找不到任何关于更新连接表中的关系属性的信息。这甚至是由 ActiveJdbc 提供的吗?

任何帮助将不胜感激。 最良好的祝愿,derelektrischemoench

【问题讨论】:

    标签: java activejdbc


    【解决方案1】:

    该框架完全按预期工作。您需要通过阅读此页面来熟悉它如何决定创建新记录或更新现有记录:http://javalite.io/surrogate_primary_keys

    基本上,您通过以下方式删除记录:

     rs.delete();
    

    所以,下次你这样做:

    rs.saveIt();   
    

    它会创建一个新记录。只需删除 rs.delete(); 就可以了。

    【讨论】:

    • 嗨 ipolevoy,我找到了罪魁祸首。我没有仔细阅读手册,我的数据库设计有一个错误。我忘了在共享表上声明一个 id 列。解决了这个问题,更新有效。这是有道理的,因为框架应该如何在 m:n 表中找到正确的条目。感谢您耐心处理我的无知:)。我想我欠你一些啤酒。继续努力,祝你好运。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 2010-10-17
    相关资源
    最近更新 更多