팔로잉/팔로우 리스트 구현
팀원 미팅, 프론트 구상
Oracle
, mySQL
과 같은 관계형 데이터베이스(RDB)에서 JSON 형태로 데이터를 저장하는 것은 비효율적이다. 데이터의 독립성이 높고 구조를 자유롭게 변경할 수 있는 것이 RDB
의 장점인데, JSON 형태의 경우 이 장점을 살릴 수 없다.
반드시 entity
간의 참조가 필요한 것은 아니다. 관리 포인트가 늘어나기 때문에 양방향 연관관계를 지양하는 것처럼, 테이블 간의 관계 설정을 정하는 것은 굉장히 조심스러운 일이다. 테이블을 사용할 때 대부분의 로직이 겹치는 경우에만 Join
해주는 것이 좋다.
org.hibernate.query.QueryTypeMismatchException: Specified result type [com.sarida.logtown.entity.User] did not match Query selection type [com.sarida.logtown.entity.Follow] - multiple selections: use Tuple or array at org.hibernate.query.spi.AbstractSelectionQuery.throwQueryTypeMismatchException(AbstractSelectionQuery.java:352) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at org.hibernate.query.spi.AbstractSelectionQuery.verifyResultType(AbstractSelectionQuery.java:342) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at org.hibernate.query.spi.AbstractSelectionQuery.checkQueryReturnType(AbstractSelectionQuery.java:290) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at org.hibernate.query.spi.AbstractSelectionQuery.visitQueryReturnType(AbstractSelectionQuery.java:232) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at org.hibernate.query.sqm.internal.QuerySqmImpl.<init>(QuerySqmImpl.java:263) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at org.hibernate.internal.AbstractSharedSessionContract.createCriteriaQuery(AbstractSharedSessionContract.java:1343) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:1304) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:120) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
타입 불일치 오류. 이것 외에도 다양한 에러와 만났다.
해결
entity
에서 문제가 발생하면 서버가 죽어버리기 때문에 확인하기가 참 힘들다. // List<User> findAllByFromUser(String username); => 타입 불일치
@Query(value = "select a from Follow f INNER JOIN User a ON f.toUser = a.username where f.fromUser = :username")
List<User> findAllByFromUser(@Param("username") String username);
유익한 글 잘 봤습니다, 감사합니다.