SpringBoot JPA 질의가 사용자 정의 엔티티 클래스에 매핑됨

2204 단어 jpaspringbootquery

장면


간단한 밤을 들어라: 예를 들어 사용자 실체류가 하나 있다
@Data
@Entity
public class User{

    @Id  
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String userName;
    
    private String password;
    
}

그리고 이메일의 실체 클래스가 있어요.
@Data
@Entity
public class Email{

    @Id  
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String account;
    
    private String code;

    private boolean active;
    
}

다른 테이블과 사용자 간의 연결을 유지하기 위한 UserRelation 실체 클래스
@Data
@Entity
public class UserRelation{

    @Id  
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private Long userId;
    
    private Long emailId;

}

각 엔티티 클래스에는 CRUD를 구현하기 위한 Repository 인터페이스가 있습니다.
마지막으로 분야별 UserPo가 있습니다.
@Data
@Entity
public class UserPo{

    private String userName;
    
    private String account;
    
}

그러면 이때 UserRelation Repository에서 FindUserPo(Long userId) 방법을 만듭니다. 어떻게 findUserPo가 UserPo 대상을 되돌릴 수 있습니까?

public interface UserRelationRepository extends JpaRepository {
    
    UserPo findUserPo(Long id);
    
}

실현


JPA는 SQL 문장을 사용자 정의하여 조회할 수 있으며, 조회 문장은 원생 SQL 문장(원생 SQL 문장은 @Query 주석에 nativeQuery =true)을 통해 조회할 수도 있고, JPQL을 통해 조회할 수도 있다.
여기에서는 JPQL(Java Persistence Query Language)을 통해 조회하는데 그 특징은 원래 SQL 문장과 유사하며 완전히 대상을 대상으로 하고 클래스 이름과 속성을 통해 접근합니다. 테이블 이름과 테이블의 속성이 아니라.
이렇게 해서 UserPo가 수정된 후에 이렇게.
public interface UserRelationRepository extends JpaRepository {

    //  nativeQuery = true
    @Query(value = "SELECT new com.xxx.xxx.bean.po.UserPo(u.userName, e.account) "+
                   "FROM UserRelation ur JOIN User u ON ur.userId = u.id"+
                   "JOIN Email e ON ur.emailId = e.id WHERE ur.userId = ?1 ")
    UserPo findUserPo(Long id);
    
}
  • 이렇게 하면 조회할 때 값을 사용자 정의 실체 클래스로 되돌릴 수 있습니다
  • 위의 SQL 문장은 모두 대상을 대상으로 하고 대응하는 필드는 모두 실체 클래스 안의 속성입니다
  • 좋은 웹페이지 즐겨찾기