मुझे अपने पोस्टग्रेएसक्यूएल डेटाबेस में एक नया रिकॉर्ड बनाने की कोशिश करने में समस्याएं आ रही हैं। (: आईडी, स्ट्रिंग: ईमेल, स्ट्रिंग: पूर्णांक पासवर्ड) मैं तो बस बाकी सेवा करने के लिए एक नया उपयोगकर्ता पोस्ट करना चाहते हैं, लेकिन मैं इस त्रुटि हो रही है:ऑटोइनक्रिएशन आईडी पोस्टग्रेएसक्यूएल और स्प्रिंग बूट डेटा जेपीए
"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
ये मेरी जावा वर्गों हैं:
डोमेन
@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;
}
}
नियंत्रक
@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;
}
}
सेवा
@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;
}
}
भंडार
public interface UserRepository extends CrudRepository<User, Integer> {
// TODO
}
एसक्यूएल
CREATE TABLE users(
id INT PRIMARY KEY NOT NULL,
email TEXT NOT NULL,
password CHAR(20) NOT NULL
);
कृपया, किसी को मेरी मदद कर, क्योंकि मैं इस मुद्दे से निपटने के लिए कैसे पता नहीं है।
यह आपके प्रोजेक्ट पर लागू नहीं हो सकता है, लेकिन आपको अवगत होना चाहिए कि डेटाबेस द्वारा उत्पन्न आईडी का उपयोग करने के लिए कुछ प्रदर्शन प्रभाव हैं। जब डेटाबेस द्वारा आईडी जेनरेट की जाती है तो आईडी को दृढ़ता संदर्भ में आईडी लोड करने के लिए प्रत्येक डालने के बाद अतिरिक्त क्वेरी का उपयोग करना चाहिए। बयानों की संख्या दोगुना करने के अलावा, यह बैच सम्मिलन अनुकूलन को भी रोकता है। –
@ क्लोस ग्रोनबेक ठीक है, मुझे डेटाबेस और प्रदर्शन के बारे में बहुत कुछ पता नहीं है। तो, मेरे डेटाबेस में स्वत: जेनरेटेड आईडी को बदलने के लिए मुझे क्या करना चाहिए? – lbpeppers
जब तक आप ऐसा नहीं करते हैं, तो आपको कुछ भी करने की आवश्यकता नहीं हो सकती है, यदि आप ऐसा करते हैं तो आपको https://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development पर '@ TableGenerator' पर एक नज़र डालना चाहिए/संस्थाएं/आईडी/टेबल जेनरेटर –