瓦大喜s 2020-04-03 14:05 采纳率: 0%
浏览 547
已采纳

android Litepal 建立一对多关联表时外键被置空

最近学习android 使用数据库时了解到litepal
就做了一个小demo
需要建立的关系是
用户——任务 1:n
用户——商品 1:n
资料参考的是郭霖老师的博客
https://blog.csdn.net/guolin_blog/article/details/39207945

当任务创建好后查看数据库外键是关联好的且连上了用户id图片说明

商品那边同样创建后查看数据库 外键也一样是关联好的图片说明

可这时候发现原来任务界面的数据消失了 后来查看到数据库发现是外键被置空了图片说明

所以求各位大佬帮忙解决下这个问题,谢谢!

 Duty duty = new Duty();
                duty.setTime(simpleDateFormat.format(date));
                duty.setHead(duty_head);
                duty.setPriority(priority);
                if (duty_category.equals("每日任务")) {
                    duty.setCategory(1);
                    Log.d(TAG, "onClick: 分类到每日任务");
                } else if (duty_category.equals("每周任务")) {
                    duty.setCategory(2);
                    Log.d(TAG, "onClick: 分类到每周任务");
                } else if (duty_category.equals("每月任务")) {
                    duty.setCategory(3);
                    Log.d(TAG, "onClick: 分类到每月任务");
                }
                if ((TextUtils.isEmpty(duty_head))) {
                    Toast.makeText(DutyCreate.this, "有什么样的目标,就有什么样的人生", Toast.LENGTH_SHORT).show();
                }


                if ((TextUtils.isEmpty(duty_achp))) {
                    Toast.makeText(DutyCreate.this, "凡事都有存在的价值", Toast.LENGTH_SHORT).show();
                } else {
                    if (isNumeric(duty_achp)) {

                        SharedPreferences preferences=getSharedPreferences("data",MODE_PRIVATE);
                        String currentUser=preferences.getString("currentUser","null");
                        int currentUser_id=preferences.getInt("currentUser_id",0);

                        duty.setAchp(Integer.parseInt(duty_achp));
                        duty.setOver(false);
                       //duty.setUser(currentUser);
                        duty.save();

                      List <User> CUser= LitePal.where("account=?",currentUser).find(User.class);
                      for(User cuser : CUser)
                      {
                            cuser.getDutyList().add(duty);
                            cuser.save();
                      }




                 Shop shop = new Shop();

               shop.setShop_name(shophead);
              /*  shop.setShop_pay(Integer.parseInt(pay));*/
                shop.setLove(love);

                if (TextUtils.isEmpty(shophead)) {
                    Toast.makeText(ShopCreate.this, "有什么样的目标,就有什么样的人生", Toast.LENGTH_SHORT).show();

                }else {

                if ((TextUtils.isEmpty(pay))) {
                    Toast.makeText(ShopCreate.this, "凡事都有存在的价值", Toast.LENGTH_SHORT).show();
                } else {
                    if (isNumeric(pay)) {
                        shop.setShop_pay(Integer.parseInt(pay));
                        shop.setOver(false);
                       shop.save();
                        SharedPreferences preferences=getSharedPreferences("data",MODE_PRIVATE);
                        String currentUser=preferences.getString("currentUser","null");

                        List<User> CUser= LitePal.where("account=?",currentUser).find(User.class);
                        for(User cuser : CUser)
                        {
                            cuser.getShopList().add(shop);
                            if(cuser.save())
                            {
                                Log.d(TAG, "onClick: 保存成功!!!!!!!!!!!!!");
                            }

                        }
  • 写回答

1条回答 默认 最新

  • tushiba 2020-04-10 13:48
    关注

    贴吧的帖子被系统删了,在这里回答你一下,因为没用过Litepal ,不保证一定有效
    图片说明
    这是Litepal 的一个issue,作者提到update的方法可以单独更新set的数据,而save则是更新类中所有的值,没有实际引用的就置为null,我估计你在对shop表操作时,从数据库中拿出的user实例是新的,并不包含对duty的引用,导致自动将外键置空了,除了update方法,你也可以试试在操作shop时重新加上duty,或者直接使用操作duty时的CUser,不要再去数据库中获取,看看效果,我没有翻他的源码,解决方式不一定对,你也可以去git上翻翻issue,或者直接提一个,不过这库很久没更新维护了,不知道会不会回复你,再不行的话去翻翻源码吧
    issue链接

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 4月11日

悬赏问题

  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示