huanxuan163 2017-05-20 06:16 采纳率: 0%
浏览 3194
已采纳

springData的JapRepository的SaveAndFlush返回值不唯一怎么办?

是这样的 我设计的表,插入数据库的时候主键是自动生成的,而这张表有2个外键

 Task task=new Task();
        task.setStudent(student);
        task.setPosition(position);
        task.setEndTime(System.currentTimeMillis()+time*1000);
        //保存任务
        taskService.save(task);

第一次保存的时候没问题,但是第二次在保存的时候就有问题,我的student和position都是一样的,

Hibernate: 
    insert 
    into
        tasks
        (create_time, end_time, position_id, status, student_id) 
    values
        (?, ?, ?, ?, ?)
Hibernate: 
    select
        task0_.id as id1_8_,
        task0_.create_time as create_t2_8_,
        task0_.end_date as end_date3_8_,
        task0_.end_time as end_time4_8_,
        task0_.position_id as position7_8_,
        task0_.start_date as start_da5_8_,
        task0_.status as status6_8_,
        task0_.student_id as student_8_8_ 
    from
        tasks task0_ 
    left outer join
        students student1_ 
            on task0_.student_id=student1_.id 
    left outer join
        positions position2_ 
            on task0_.position_id=position2_.p_id 
    where
        student1_.id=? 
        and position2_.p_id=?

他插入完数据库后 紧接着再select的时候查询条件是按照我这个student和position去查的 这肯定不唯一啊 然后就报错了:javax.persistence.NonUniqueResultException: result returns more than one elements
可是我又要保存多次相当于每次保存都要新增一条记录 明明我主键是自动生成的不唯一啊

怎么办啊

  • 写回答

1条回答 默认 最新

  • 夕阳雨晴 2017-05-20 06:29
    关注

    保存多次,对于jpa来说,如果i主键id不存在则新增,否则主键id存在则修改,故只需要第二次保存之前查询一次数据,使查询出来的数据带上id,在此基础上,将修改的信息set进你查询出来的对象,然后save,即和达到第二次保存甚至多次保存的目的。

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

报告相同问题?

悬赏问题

  • ¥15 代码的修改,添加和运行完善
  • ¥15 krpano-场景分组和自定义地图分组
  • ¥15 lammps Gpu加速出错
  • ¥15 关于PLUS模型中kapaa值的问题
  • ¥15 关于博途V17进行仿真时无法建立连接问题
  • ¥15 机器学习教材中的例题询问
  • ¥15 求.net core 几款免费的pdf编辑器
  • ¥15 为什么安装HCL 和virtualbox之后没有找到VirtualBoxHost-OnlyNetWork?
  • ¥15 C# P/Invoke的效率问题
  • ¥20 thinkphp适配人大金仓问题