В приведенном ниже коде, когда конечная точка 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> {
}