Spring

SpringData Jdbc를 사용하여 엔티티를 두 번 삽입 할 수없는 이유는 무엇입니까?

기록만이살길 2021. 3. 11. 15:05
반응형

SpringData Jdbc를 사용하여 엔티티를 두 번 삽입 할 수없는 이유는 무엇입니까?

1. 질문(문제점):

내 법인 :

@Table("user")
public class User {

    @Id
    private Long user_id;
    private String username;
    private String password;

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public User() {
    }

    public Long getUser_id() {
        return user_id;
    }

    public void setUser_id(Long user_id) {
        this.user_id = user_id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

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

내 저장소 :

public interface UserRepository extends CrudRepository<User, Long> {

    @Query("select * from user where username = :username")
    User findByUsername(@Param("username") String username);
}

사용자 테이블을 만들기위한 내 SQL :

CREATE TABLE `user` (
  `user_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL,
  `password` text NOT NULL,
  PRIMARY KEY (`user_id`),
  UNIQUE KEY `UINQUE_USERNAME`(`username`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
User userForRegister = new User(username, passwordEncoder.encode(password));
userRepository.save(userForRegister)

'userRepository.save (userForRegister)'줄을 실행하면 처음에 엔터티를 성공적으로 삽입합니다.

하지만 다른 사용자 이름으로 다른 사용자 엔티티를 삽입하려면 오류가 발생합니다.

2021-01-08 21:37:38.242  INFO 11180 --- [nio-8080-exec-8] c.k.centre.controller.UserController     : Failed to execute DbAction.InsertRoot(entity=com.***.***.Entity.User@65bc9ea1, generatedId=null)

사용자 테이블의 모든 데이터를 삭제할 때까지 삽입 할 수 있습니다. 내가 놓친 점이 있습니까?

2. 해결방안:

GenerateValue가 문제를 해결할 것이라고 생각합니다.

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long user_id;

또한 @Column 어노테이션을 사용하여 ther 필드를 데이터베이스 열에 매핑해야한다고 생각합니다.

@Column(name = "user_id")
private Long user_id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
65630259
반응형