【问题标题】:Spring Boot INSERT parametersSpring Boot INSERT 参数
【发布时间】:2021-04-13 09:02:28
【问题描述】:

我需要在我的spring项目中更新person类中的person_id。代码部分如下。但是插入查询在存储库部分不起作用。需要一个一个作为参数发送吗?

public void save(){
     List<Person> personList = service.findByAll();
            for (Person person : personList) {
                personRepository.getNextSequence(person);
            }
    }


@Repository
   public interface PersonRepository extends JpaRepository<Person, Integer> {
    
        @Modifying
        @Query(value = "INSERT INTO PERSON(person_id,name) VALUES(PERSON_ID_SEQ.NEXTVAL,:person.name) ", nativeQuery = true)
        public void getNextSequence( Person  person);
    
     }

【问题讨论】:

  • 为什么?为什么不直接在PersonRepository 上调用save 并让JPA 处理它。您目前正在使用 JPA 并正在努力解决它。
  • 我正在用保存创建一条新记录,我想要更改现有记录的ID。
  • 你正在做一个插入,它正在创建一条新记录。
  • 对不起,我解释的不完整,旧的id信息将停止,我实际上需要创建一个新的id克隆。
  • 然后新建一个人,复制数据(不带id)并调用save。

标签: java oracle spring-boot sql-insert


【解决方案1】:

为了能够使用新 ID 保存同一个对象,您必须分离实体,将 ID 设置为 0 并保存。这将使用新 ID 保存同一个对象。

所以代码应该是这样的:

// somewhere in the code
@Autowired
private EntityManager entityManager;    

List<Person> personList = service.findByAll();

for (Person person : personList) {
    entityManager.detach(person);
    person.setId(0);
}

personRepository.saveAll(personList);

【讨论】:

    猜你喜欢
    • 2022-10-21
    • 1970-01-01
    • 2021-09-15
    • 2019-03-07
    • 2017-09-11
    • 1970-01-01
    • 2019-04-19
    • 2018-07-11
    • 2019-02-11
    相关资源
    最近更新 更多