पहली बार एपीआई शुरू करने के बाद, पहले 3 उपयोगकर्ता निर्माण पोस्ट अनुरोध विफल (पोस्ट के नीचे स्क्रीनशॉट) नीचे की त्रुटि (अद्वितीय बाधा उल्लंघन) के साथ।

बाद के अनुरोध काम करते हैं, पहले बनाए गए उपयोगकर्ता के पास 4, फिर 5, आदि की आईडी होती है ...

मैं उपयोगकर्ता निर्माण को पहले (3) प्रयासों पर कैसे काम कर सकता हूं?

मुझे संदेह है कि यह मेरे उपयोगकर्ताओं के प्री-सीडिंग से संबंधित है, जो मैं नीचे दी गई स्क्रिप्ट के साथ कर रहा हूं। संभवत: ऑटो आईडी पीढ़ी पहले 1,2,3 कोशिश करती है - जो पहले से ही उपयोग में हैं?

INSERT INTO user VALUES (1, 'user1', 'pass1', 'ADMIN'); INSERT INTO user VALUES (2, 'user2', 'pass2', 'USER'); INSERT INTO user VALUES (3, 'user3', 'pass3', 'ADMIN')

कथन निष्पादित नहीं कर सका; एसक्यूएल [एन / ए]; बाधा [\"सार्वजनिक.उपयोगकर्ता (आईडी) पर प्राथमिक कुंजी\"; SQL कथन:\ n उपयोगकर्ता (नाम, पासवर्ड, भूमिका, आईडी) मान (?,?,?,?) [23505-196]] में डालें; नेस्टेड अपवाद है org.hibernate.exception.ConstraintViolationException: कथन निष्पादित नहीं कर सका",

@RestController
public class UserResource {

    @Autowired
    private UserRepository userRepository;

    @GetMapping("/users")
    public List<User> retrievaAllUsers() {
        return userRepository.findAll();
    }

    @DeleteMapping("/users/{id}")
    public void deleteUser(@PathVariable Long id) {
        userRepository.deleteById(id);
    }

    @PostMapping("/users")
    public ResponseEntity<Object> createUser(@RequestBody User user) {
        User savedUser = userRepository.save(user);

        URI location = ServletUriComponentsBuilder.fromCurrentRequest()
                .path("/{id}")
                .buildAndExpand(savedUser.getId())
                .toUri();

        return ResponseEntity.created(location).build();

    }


}

-

@Entity
@Table(name = "user")
public class User {

    @Id
    @GeneratedValue
    private Long id;
    private String name;
    private String password;
    @Enumerated(EnumType.STRING)
    private Role role;

    public User() {
        super();
    }

    public User(Long id, String name, String password, Role role) {
        this.id = id;
        this.name = name;
        this.password = password;
        this.role = role;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Role getRole() {
        return role;
    }

    public void setRole(Role role) {
        this.role = role;
    }
}

enter image description here

  • संपादित करें - अतिरिक्त भूमिका वर्ग

    public enum Role {
    
    USER, ADMIN
    

    }

1
ab11 21 सितंबर 2018, 23:12

2 जवाब

सबसे बढ़िया उत्तर

यदि आप कॉलम परिभाषा में AUTO_INCREMENT का उपयोग कर रहे हैं, तो रणनीति को GenerationType.AUTO से GenerationType.IDENTITY में बदलने का प्रयास करें।

जब मैंने किसी प्रोजेक्ट को स्प्रिंग बूट 1.5 से 2.0 में अपग्रेड किया तो मैंने ऐसा ही व्यवहार देखा।

1
The Gilbert Arenas Dagger 22 सितंबर 2018, 00:13

आपको यह सुनिश्चित करने के लिए कॉलम नाम भी प्रदान करना चाहिए कि यह आदेश दिया गया है।

उपयोगकर्ता (आईडी, नाम, पासवर्ड, भूमिका) मूल्यों में सम्मिलित करें (1, 'उपयोगकर्ता 1', 'पास 1', 'व्यवस्थापक');

उपयोगकर्ता में डालें (आईडी, नाम, पासवर्ड, भूमिका) मान (2, 'उपयोगकर्ता 2', 'पास 2', 'उपयोगकर्ता');

उपयोगकर्ता में डालें (आईडी, नाम, पासवर्ड, भूमिका) मान (3, 'उपयोगकर्ता 3', 'पास 3', 'एडमिन')

1
sovannarith cheav 22 सितंबर 2018, 03:35