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

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 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100