인프런 커뮤니티 질문&답변

ktwmomo님의 프로필 이미지
ktwmomo

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

스프링 데이터 JPA

에러 문의

작성

·

419

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)

[질문 내용]
아래는 어떤 에러나요? Bean을 생성 못한다는것 같은데?
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'springConfig' defined in file [C:\Users\kimtw\Desktop\spring study\books-mag\books-mag\out\production\classes\book\booksmag\SpringConfig.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springDataJpaBookMemberRepository' defined in book.booksmag.repository.SpringDataJpaBookMemberRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract java.util.Optional book.booksmag.repository.SpringDataJpaBookMemberRepository.findByName(java.lang.String)! Reason: Failed to create query for method public abstract java.util.Optional book.booksmag.repository.SpringDataJpaBookMemberRepository.findByName(java.lang.String)! No property 'name' found for type 'BookMember'!; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Optional book.booksmag.repository.SpringDataJpaBookMemberRepository.findByName(java.lang.String)! No property 'name' found for type 'BookMember'!

 

 
 
 
 
 

답변 10

2

많은 부분이 편의를 위해 추상화되어 있어서 그렇게 느끼실 수 있을 것 같습니다.

아래 공식 문서를 참고하시면 대략적으로 어떤 느낌인지 아시는데 도움되실거에요.

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation

ktwmomo님의 프로필 이미지
ktwmomo
질문자

감사합니다.

1

친절한 답변 감사합니다! 개인적으로 도움이 많이 되었습니다.

0

ktwmomo님의 프로필 이미지
ktwmomo
질문자

public class BookMember {
private String bookName;
Optional<BookMember> findByBookName(String bookName);

상기처럼 했더니 에러는 안나네요.  

감사합니다. 코볼세데라 어렵네요 ㅋㅋ

개념이 안잡힘

 

 

 

 

 

0

메서드명을 따라 쿼리를 만들 때 camelCase를 기준으로 만들기 때문입니다.

0

ktwmomo님의 프로필 이미지
ktwmomo
질문자

 "findBy" 이후에 엔티티의 속성 이름을 붙이다. 이 속성 이름은 첫 글자는 대문자로 한다. 

상기처럼 

Optional<BookMember> findByBook_name(String book_name);

으로 바꾸고 BookMember에도 book_name인데

private String book_name; 

Failed to create query for method public abstract java.util.Optional book.booksmag.repository.SpringDataJpaBookMemberRepository.findByBook_name(java.lang.String)! No property 'book' found for type 'BookMember'!

왜 Book_name이 아니고 'book' 으로 인식되나요?  

"_"를 쓰면 안되나요?

귀찬게 해서 죄송합니다.

 

 

0

질문자 분께서 repository 메서드를 findByName으로 지었기 때문에 name 필드가 존재해야 합니다.

 

1. repository의 메서드명을 관례에 맞게 수정하는 방법

2. 테이블 구성을 변경하는 방법

2가지 옵션이 있습니다.

 

본인이 할 수 있는 방법으로 변경해주시면 됩니다.

 

아울러, jparepository를 구현하고 메서드를 만들 경우 어떻게 쿼리가 만들어지는지에 대해 학습하시면 도움이 되실 것 같습니다.

https://it-hhhj2.tistory.com/99

0

ktwmomo님의 프로필 이미지
ktwmomo
질문자

name이라는 필드는 필수로 있어야하나요?

테이블 구성이 

CREATE TABLE BOOK_MAG

(BOOK_ID NUMBER(13) PRIMARY KEY, 

 BOOK_NAME VARCHAR(255),

 BOOK_KDC NUMBER(3),

 BOOK_PUBLISHER_BUSINESS_NO  NUMBER(10),

 BOOK_PUBLISHER  VARCHAR(255),

 BOOK_AUTHOR_ID NUMBER(9),

 BOOK_AUTHOR  VARCHAR(255),

 BOOK_MAKE_DATE DATE,

 BOOK_PRICE NUMBER(13)

 

 );

이런데요?

0

 No property 'name' found for type 'BookMember'!

BookMember 타입에 'name'이라는 프로퍼티가 없다는 오류입니다.

올려주신 코드를 보니 해당 객체에 name이라는 필드가 보이지 않습니다.

0

ktwmomo님의 프로필 이미지
ktwmomo
질문자

빠른 답변  감사합니다.

BookMember에

@Entity
@Table(name="book_mag")
public class BookMember {
// @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
private Long book_id; //BOOK_ID NUMBER(13) PRIMARY KEY
private String book_name; //BOOK_NAME VARCHAR(255),
private Long book_kdc; //BOOK_KDC NUMBER(3),

상기 처럼 되있고

SpringDataJpaBookMemberRepository에 

public interface SpringDataJpaBookMemberRepository extends JpaRepository<BookMember,Long>, BookMemberRepository {

@Override
Optional<BookMember> findByName(String book_name);
}

상기처럼 했는데도 동일 에러 나오는데요? 어떻게해야할지 모르겠어요?

Failed to create query for method public abstract java.util.Optional book.booksmag.repository.SpringDataJpaBookMemberRepository.findByName(java.lang.String)! No property 'name' found for type 'BookMember'!

 

 

 

 

 

 

 

 

 

0

안녕하세요. ktwmomo님, 공식 서포터즈 David입니다.

에러를 잘 들여다보면 이유가 나와있습니다.

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'springConfig' defined in file [C:\Users\kimtw\Desktop\spring study\books-mag\books-mag\out\production\classes\book\booksmag\SpringConfig.class]: Unsatisfied dependency expressed through constructor parameter 0;

=> springConfig 빈을 생성하지 못한다

nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springDataJpaBookMemberRepository' defined in book.booksmag.repository.SpringDataJpaBookMemberRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed;

=> springDataJpaBookMemberRepository 빈을 생성하지 못한다.

nested exception is org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract java.util.Optional book.booksmag.repository.SpringDataJpaBookMemberRepository.findByName(java.lang.String)!

=> findByName 쿼리를 생성하지 못한다.

Reason: Failed to create query for method public abstract java.util.Optional book.booksmag.repository.SpringDataJpaBookMemberRepository.findByName(java.lang.String)!

No property 'name' found for type 'BookMember'!;

=> 그 이유는 BookMember에 name 프로퍼티가 없어서

nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Optional book.booksmag.repository.SpringDataJpaBookMemberRepository.findByName(java.lang.String)!

No property 'name' found for type 'BookMember'!

위 정보를 토대로 BookMember를 다시 살펴보시고 시도해주세요.

감사합니다.

ktwmomo님의 프로필 이미지
ktwmomo

작성한 질문수

질문하기