목록programming/JPA (4)
돌맹이
JPA에서 TABLE JOIN할 때, NativeQuery를 이용할 수도 있지만 그렇게 하면 Query를 최소한으로 사용하는 JPA의 의미가 퇴색되므로, 되도록 JPQL을 이용하여 JOIN을 하는 것이 좋다. 작성하는 과정에서 Error가 존재한 이전 코드와 문제를 해결한 이후 코드를 정리해보았다. # 기존 코드 // Member Class @Getter @Setter @ToString @Entity @Table(name = "tbl_members") @EqualsAndHashCode(of="uid") public class Member { @Id private String uid; private String upw; private String uname; } // Profile Class @Getter..
# 코드 public interface MemberRepository extends CrudRepository{ @Query("SELECT m.uid, count(p) FROM Member m LEFT OUTER JOIN Profile p " + "On m.uid = p.member WHERE m.uid = ?1 GROUP BY m") public List getMemberWithProfileCount(String uid); } # 오류 발생 MemberRepository를 위와 같이 작성했을 때, 다음과 같은 오류가 발생했다. Error creating bean with name 'memberRepository' defined in org.zerock.persistence.MemberRepository..
findOne 메소드는 Spring Boot에서 엔티티의 식별자(ID)를 기반으로 단일 엔티티를 검색하는데 사용되었으나 현재는 Deprecated 되었다. 따라서 Spring Boot 2.0부터는 findOne 대신 다른 방식을 사용해야 하는데, 다음와 같은 메소드를 사용할 수 있다. 1. findById 엔티티의 식별자(ID)를 기반으로 단일 엔티티를 검색하는 메소드로, return타입으로 Optional을 사용해야 한다. CrudRepository 또는 JpaRepository 인터페이스에서 제공되고 엔티티를 찾지 못할 경우 Optional.empty()를 반환한다. Optional findById(ID id); 만약 return으로 Optional이 아닌 타입을 받고 싶다면, 뒤에 .get() 메소..
# 오류 발생 Spring에서 JPA를 사용할 때, 다음과 같은 오류가 발생하였다. org.hibernate.boot.registry.selector.spi.StrategySelectionException: Unable to resolve name [org.hibernate.dialect.MySQL5InnoDBDialect] as strategy [org.hibernate.dialect.Dialect] # 코드 위 오류는 application.properties 에서 JPA MySQL Storage engine 지정이 제대로 되지 않았을 때 발생한다. spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect # 해결 방법 해당 부분을 ..