PostgreSQL veritabanımda yeni bir kayıt oluşturmaya çalışırken sorun yaşıyorum.AutoIncrement Id PostgreSQL ve Spring Boot Verileri JPA
: Bunlar benim Java sınıfları vardır"exception": "org.springframework.dao.DataIntegrityViolationException",
"message": "could not execute statement; SQL [n/a]; constraint [id]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
: Ben bu hatayı yaşıyorum ama (şifre: id, Dize: e-posta, dize int) Sadece DİNLENME hizmetine yeni bir kullanıcı POST istiyorum
Alan
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String email;
private String password;
public User() {}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Kontrolör
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(method = RequestMethod.GET)
public List<User> findAll() {
return userService.findAll();
}
@RequestMapping(method = RequestMethod.POST)
public User addUser(@RequestBody User user) {
userService.addUser(user);
return user;
}
}
Servis
01 Bu sorunu çözmek için nasıl bilmiyorum çünkü@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public List<User> findAll() {
return (List<User>) userRepository.findAll();
}
public User addUser(User user) {
userRepository.save(user);
return user;
}
}
Depo
public interface UserRepository extends CrudRepository<User, Integer> {
// TODO
}
SQL
CREATE TABLE users(
id INT PRIMARY KEY NOT NULL,
email TEXT NOT NULL,
password CHAR(20) NOT NULL
);
, biri, bana yardım edin.
Bu, projeniz için geçerli olmayabilir, ancak veritabanı tarafından kimlik oluşturmanın kullanılmasının bazı performans sonuçları olduğunun farkında olmalısınız. Kimlik veritabanı JPA tarafından oluşturulduğunda, her bir ekleme işleminden sonra kimliğin kalıcılık bağlamına yüklenmesi için ek bir sorgu kullanması gerekir. İfadelerin sayısını iki katına çıkarmanın yanı sıra, parti eki optimizasyonunu da engeller. –
@KlausGroenbaek Veritabanları ve performans hakkında çok fazla şey bilmiyorum. Peki, otomatik olarak oluşturulmuş kimliği veritabanımda değiştirmek için ne yapmalıyım? – lbpeppers
İşlem başına çok sayıda satır eklemediğiniz sürece hiçbir şey yapmanız gerekmeyebilir, eğer bunu yaparsanız, buradaki https://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Entities/Ids/TableGenerator –