오랜만에 Spring Boot + JPA 코드를 분석하다보니...

Spring Boot은 처음이고 그래도 옛날 Spring 했던 경험이 있어서 대략 분위기를 파악하고 코드 분석 중인데 JPA의 @Query 부분에서 현타가 무지하게 오고 있습니다. DBMS와의 의존성을 줄이기 위한 노력? 인지 JSQL(Java Persistence Query Language)을 사용하는데 글쎄요… 유용한점은 모르겠습니다.

오래간만에 Java 코드를 분석하니 세삼 C# + EF Core의 편안함을 다시 한번 느끼네요. LINQ to SQL에 의해 표현식을 크게 신경쓸 필요 없이 컴파일 시점에서 LINQ로 왠간한건 오류를 잡아주니까요. Java는? JSQL을 안쓰고 코드로 전개할라 치면 너무 정신산만해지는군요.

– EF Core은 SQL에 비해 왜 이렇게 복잡하게 쿼리를 만들어야해! 했던 것도 반성도 되면서요

경험은 주관적 측면이 있어서 Java + Spring Boot을 오래 쓰신 분은 이것이 편해! 라고 하시겠지만… 코드 분석을 안할수도 없어서 땀흘리면 분석중입니다.

8개의 좋아요

전문 자바 개발자가 .NET 맛 좀 보고 이런 간증해주면 좋을 거 같군요…ㅠㅠ

2개의 좋아요

생각해보면 그 템플릿을 10년 정도 그 방법대로 만들고 있으니 너무 익숙해져서 EF 의 거부감이 들수도 있습니다.
node도 EF 비슷하게 사용하는 라이브러리가 있는데 Java 진영은 비슷한것 있는것 같은데 잘 안쓰더군요

2개의 좋아요

JPA로만 복잡한 쿼리를 조회하기에는 무리가 있어 다른 방법을 사용하는데요.

디모이님이 말씀하신 Query 어노테이션을 사용한 방법도 있고, .NET LINQ와 비슷한 QueryDsl 라이브러리도 있습니다.

문자열로 쿼리를 작성하는게 아닌 Fluent API 형식으로 작성하기 때문에 좀 더 객체지향적으로(?) 호출할 수 있습니다.

List<Person> persons = queryFactory.selectFrom(person)
  .where(
    person.firstName.eq("John"),
    person.lastName.eq("Doe"))
  .fetch();

List<Person> persons = queryFactory.selectFrom(person)
  .orderBy(person.lastName.asc(), 
           person.firstName.desc())
  .fetch();
1개의 좋아요