package study.querydsl.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import study.querydsl.entity.Member;
import java.util.List;
public interface MemberRepository extends JpaRepository<Member, Long> {
@Query(value = "select * from Member where username = :username", nativeQuery = true)
List<Member> findMemberByUsername(String username);
}
package study.querydsl.repository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.transaction.annotation.Transactional;
import study.querydsl.entity.Member;
import javax.persistence.EntityManager;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
@Transactional
//@ActiveProfiles(value = "local")
class MemberRepositoryTest {
@Autowired EntityManager em;
@Autowired MemberRepository memberRepository;
@Test
public void test() {
Member memberABC = new Member("memberABC", 10);
em.persist(memberABC);
List<Member> result = memberRepository.findMemberByUsername("member1");
for (Member member1 : result) {
System.out.println("member1 = " + member1);
}
}
}
org.springframework.dao.InvalidDataAccessApiUsageException:
For queries with named parameters you need to provide names for method parameters; Use @Param for query method parameters,
or when on Java 8+ use the javac flag -parameters; nested exception is java.lang.IllegalStateException:
For queries with named parameters you need to provide names for method parameters;
Use @Param for query method parameters, or when on Java 8+ use the javac flag -parameters
이 세팅을 IntelliJ로 한 이유는 gradle로 설정하면 스프링 부트 구동시간이 오래걸려서였다.
하지만 gradle에서 설정한 자바버전은 11인데 IntelliJ에서 빌드를 할땐 8아래 버전이기 때문에 에러가 난다.
따라서 Build and run을 gradle로 바꿔주면 해결된다.