[JPA] IllegalArgumentException: Unable to locate Attribute with the the given name [***] on this ManagedType

Coastby·2022년 12월 1일
0

문제 해결

목록 보기
7/17

🚫 에러

uId의 중복을 체크하기 위해서 uId로 db 검색을 해야했다. 그래서 repository에 jpa method를 추가하고 실행했는데 실행이 되지 않았다.

jpa 메소드에 있는 uId가 도메인 attribute에서 찾을 수 없다고 에러가 난다. 검색해보니 다른 경우는 보통 변수의 첫 글자를 대문자로 해서 그런 경우가 많았는데 그런 경우도 아니다. mysql에도 테이블이 만들어져있다.

Caused by: java.lang.IllegalArgumentException: Unable to locate Attribute  with the the given name [UId] on this ManagedType [com.example.prac1201.domain.User]

⌨️ UserRepository

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    Optional<User> findByUId(String uId);
}

⌨️ User

@Entity
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "user2")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(unique = true)
    private String uId;
    private String password;
    private String name;
}

⭕️ 해결

https://github.com/spring-projects/spring-data-commons/issues/1996

변수명이 소문자-대문자로 시작하면 spring-data-jpa 버그로 인해 파싱이 잘 안 된다고 한다. 변수명을 변경하거나 @Query 어노테이션을 사용하면 된다.

⌨️ UserRepository

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    @Query("SELECT u FROM User u WHERE u.uId =:uId")
    Optional<User> findByUId(String uId);
}
profile
훈이야 화이팅

0개의 댓글