Почему hibernate выполняет 2 оператора выбора и 2 оператора обновления, когда используется генератор ключей SEQUENCE? - PullRequest
0 голосов
/ 21 марта 2020

В приведенном ниже коде, когда конечная точка createUser получает первый раз, hibernate выполняет 5 запросов:

Hibernate: select next_val as id_val from user_gen for update Hibernate: update user_gen set next_val= ? where next_val=? Hibernate: select next_val as id_val from user_gen for update Hibernate: update user_gen set next_val= ? where next_val=? Hibernate: insert into user (first_name, id) values (?, ?)

Почему он выполняет выбор и обновление дважды?

import lombok.Data;
import javax.persistence.*;

@Entity
@Data
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_gen")
    @SequenceGenerator(name = "user_gen")
    private Integer id;
    private String firstName;
}

-

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping(path = "/users")
    @ResponseStatus(HttpStatus.CREATED)
    public void createUser(@RequestBody User user) {
        userService.createUser(user);
    }
}

-

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
    public void createUser(User user) {
        userRepository.save(user);
    }
}

-

public interface UserRepository extends JpaRepository<User, Integer> {
}
...