2017-01-22 10 views
6

मुझे अपने पोस्टग्रेएसक्यूएल डेटाबेस में एक नया रिकॉर्ड बनाने की कोशिश करने में समस्याएं आ रही हैं। (: आईडी, स्ट्रिंग: ईमेल, स्ट्रिंग: पूर्णांक पासवर्ड) मैं तो बस बाकी सेवा करने के लिए एक नया उपयोगकर्ता पोस्ट करना चाहते हैं, लेकिन मैं इस त्रुटि हो रही है:ऑटोइनक्रिएशन आईडी पोस्टग्रेएसक्यूएल और स्प्रिंग बूट डेटा जेपीए

"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 
); 

कृपया, किसी को मेरी मदद कर, क्योंकि मैं इस मुद्दे से निपटने के लिए कैसे पता नहीं है।

उत्तर

6

मैं समाधान मिल गया। मैं इन एक के लिए स्क्रिप्ट को बदलने की जरूरत: फिर

CREATE TABLE users(
    id SERIAL PRIMARY KEY NOT NULL, 
    email TEXT NOT NULL, 
    password TEXT NOT NULL 
); 

, इकाई इस के साथ एनोटेट किया जाना चाहिए:

@Entity 
@Table(name = "users") 
public class User { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(columnDefinition = "serial") 
    private Long id; 
    private String email; 
    private String password; 

    public User() {} 

    public Long getId() { 
    return id; 
    } 

    public void setId(Long 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; 
    } 
} 
+0

यह आपके प्रोजेक्ट पर लागू नहीं हो सकता है, लेकिन आपको अवगत होना चाहिए कि डेटाबेस द्वारा उत्पन्न आईडी का उपयोग करने के लिए कुछ प्रदर्शन प्रभाव हैं। जब डेटाबेस द्वारा आईडी जेनरेट की जाती है तो आईडी को दृढ़ता संदर्भ में आईडी लोड करने के लिए प्रत्येक डालने के बाद अतिरिक्त क्वेरी का उपयोग करना चाहिए। बयानों की संख्या दोगुना करने के अलावा, यह बैच सम्मिलन अनुकूलन को भी रोकता है। –

+0

@ क्लोस ग्रोनबेक ठीक है, मुझे डेटाबेस और प्रदर्शन के बारे में बहुत कुछ पता नहीं है। तो, मेरे डेटाबेस में स्वत: जेनरेटेड आईडी को बदलने के लिए मुझे क्या करना चाहिए? – lbpeppers

+0

जब तक आप ऐसा नहीं करते हैं, तो आपको कुछ भी करने की आवश्यकता नहीं हो सकती है, यदि आप ऐसा करते हैं तो आपको https://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development पर '@ TableGenerator' पर एक नज़र डालना चाहिए/संस्थाएं/आईडी/टेबल जेनरेटर –

0

एसक्यूएल इस तरह होना चाहिए ..

CREATE TABLE users(
    id INT PRIMARY KEY BIGINT NOT NULL AUTO_INCREMENT, 
    email TEXT NOT NULL, 
    password CHAR(20) NOT NULL 
); 
+0

मुझे उस स्क्रिप्ट – lbpeppers

+3

के साथ प्रयास करें AUTO_INCREMENT PostgreSQL पर काम नहीं करता – lbpeppers

+0

के लिए धन्यवाद करते हैं मदद, वैसे भी। – lbpeppers

संबंधित मुद्दे