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 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64