Java 弹簧靴插入参数
我需要在我的spring项目中更新person类中的person_id。代码部分如下。但是插入查询在存储库部分不起作用。我是否需要将其作为参数逐个发送Java 弹簧靴插入参数,java,oracle,spring-boot,sql-insert,Java,Oracle,Spring Boot,Sql Insert,我需要在我的spring项目中更新person类中的person_id。代码部分如下。但是插入查询在存储库部分不起作用。我是否需要将其作为参数逐个发送 public void save(){ List<Person> personList = service.findByAll(); for (Person person : personList) { personRepository.getNextSequence(
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);
}
public void save(){
List personList=service.findByAll();
for(个人:个人列表){
personRepository.getNextSequence(person);
}
}
@存储库
公共接口PersonRepository扩展了JpaRepository{
@修改
@查询(value=“插入到PERSON(PERSON\u id,name)值(PERSON\u id\u SEQ.NEXTVAL,:PERSON.name)”,nativeQuery=true)
公共无效getNextSequence(个人);
}
要使用新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);
//代码中的某个地方
@自动连线
私人实体管理者实体管理者;
List personList=service.findByAll();
for(个人:个人列表){
实体经理(人);
person.setId(0);
}
personRepository.saveAll(personList);
为什么?为什么不直接调用PersonRepository
上的save
,让JPA来处理呢。您当前正在使用JPA并努力解决它。我正在使用“保存”创建一个新记录,我要做的是更改现有记录的id。您正在执行一个正在创建新记录的插入操作。很抱歉,我解释不完整,旧的id信息将停止,我需要创建一个新的id克隆。然后创建一个新的人,复制数据(没有id)并调用save。