매일매일 배운 그것들

1. 복잡한 JPA쓰는법! 경험치 +1

presnt__lee 2023. 5. 29. 13:12
반응형

이론을 통해서를 쓰는것은 알았지만, 단순한 findById 와같은 where절을 사용하는 것이 아닌 ,

다소 복잡(내기준)한 JPA 메소드를 쓰는게 너무 어려웠다. native 쿼리문을 써야하나 고민하다가

내가 원하는 데이터도 JPA 메소드를 통해서 가져올 수 있다는 사실을 알게되었다.(생각보다 많은 정보들을 조회해 올 수 있다. 

 

public interface StdAttendanceRepository extends JpaRepository <StdAttendance, Long> {

						//여기는 필드명 기준 							여기는? 
	List<StdAttendance>findByStdAtdDateAndCourseLectureLecCode(Long stdAtdDate, Long lecCode );
	
}

findBy 까지는 다들 알고 있겠지,

 

StdAtdDate : StdAttendance라는 엔티티를 기준으로 조회해오면 된다. -> 이부분은 어렵지 않았다. 

하지만 나는 특정 주차 만 가져올게 아니라, 특정 강의의, 특정 주차를 가져와야 했는데...

StdAttendance의 구성은 

package com.greedy.mingle.stdAttendance.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.hibernate.annotations.DynamicInsert;

import com.greedy.mingle.cource.entity.Course;
import com.greedy.mingle.subject.entity.Department;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Entity
@Table(name="TBL_STD_ATTENDANCE")
@DynamicInsert
@SequenceGenerator(name="SEQ_STD_ATD_CODE", sequenceName="SEQ_STD_ATD_CODE", allocationSize=1)
public class StdAttendance {
	
	@Id
	@Column(name="STD_ATD_CODE")
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_STD_ATD_CODE")
	private Long stdAtdCode;				
	
	@Column(name="STD_ATD_STATUS")
	private String stdAtdStatus;
	
	@Column(name="STD_ATD_DATE")
	private Long stdAtdDate;
	
	@ManyToOne
	@JoinColumn(name="COURSE_CODE")
	private Course course;

이렇게 되어있다.  여기서 데이터의 지도를 잠시 펼처 보자면, 

Course 의 객체 안에 Lecture라는 객체가 있고 그 안에 LecCode가 필요한 상황 ! 

그렇기 떄문에 뒤에 

AndCourseLectureLecCode(Long stdAtdDate, Long lecCode );

And 다음에 CourseLectureLecCode라는 식으로 입력해주면 객체안의 객체안의 그값!  식으로 작성할 수 있다..

 

라는 사실을 오늘 경험치 +1 했습니다!!

 

 

"이렇게 하나씩 알아가는거지!"

반응형