기본적인 정보는 JpaRepository를 통해 쉽고 빠르게 처리할 수 있다.
findBy를 사용해서 Entity의 컬럼값으로 조회하는 방법은 알지만 FK의 값으로 조회하고싶은 경우는 어떻게 findBy를 작성해야 되는지 몰라서 글을 작성하게되었다.
package com.example.springProject.entity;
import com.example.springProject.dto.BoardDTO;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.persistence.*;
@Entity
@Getter
@Setter
@ToString
public class BoardEntity extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String boardWriter;
@Column
private String boardTitle;
@Column(length = 555)
private String boardContents;
@Column
private int boardHits;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id")
private MemberEntity memberEntity;
public static BoardEntity toBoardEntity(BoardDTO boardDTO, MemberEntity memberEntity) {
BoardEntity boardEntity = new BoardEntity();
boardEntity.setBoardWriter(boardDTO.getBoardWriter());
boardEntity.setBoardTitle(boardDTO.getBoardTitle());
boardEntity.setBoardContents(boardDTO.getBoardContents());
boardEntity.setMemberEntity(memberEntity);
boardEntity.setBoardHits(0);
return boardEntity;
}
}
package com.example.springProject.entity;
import com.example.springProject.dto.MemberDTO;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.web.bind.annotation.GetMapping;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Getter
@Setter
@Table(name = "member_table")
public class MemberEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) //auto-increment
private Long memberId;
@Column(unique = true)
private String memberEmail;
@Column
private String memberPassword;
@Column
private String memberName;
@Column
private int memberAge;
@Column(unique = true)
private String memberPhone;
@OneToMany(mappedBy = "memberEntity", cascade = CascadeType.REMOVE, orphanRemoval = true, fetch = FetchType.LAZY)
private List<BoardEntity> boardEntityList = new ArrayList<>();
public static MemberEntity toMemberEntity(MemberDTO memberDTO) {
MemberEntity memberEntity = new MemberEntity();
//memberEntity.setMemberId(memberDTO.getMemberId());
memberEntity.setMemberEmail(memberDTO.getMemberEmail());
memberEntity.setMemberPassword(memberDTO.getMemberPassword());
memberEntity.setMemberName(memberDTO.getMemberName());
memberEntity.setMemberAge(memberDTO.getMemberAge());
memberEntity.setMemberPhone(memberDTO.getMemberPhone());
return memberEntity;
}
public static MemberEntity toUpdateMemberEntity(MemberDTO memberDTO) {
MemberEntity memberEntity = new MemberEntity();
memberEntity.setMemberId(memberDTO.getMemberId());
memberEntity.setMemberEmail(memberDTO.getMemberEmail());
memberEntity.setMemberPassword(memberDTO.getMemberPassword());
memberEntity.setMemberName(memberDTO.getMemberName());
memberEntity.setMemberAge(memberDTO.getMemberAge());
memberEntity.setMemberPhone(memberDTO.getMemberPhone());
return memberEntity;
}
}
두개의 Entity중 BoardEntity에서 어떠한 MemberEntity객체와 연결된 정보를 모두 갖고 오고싶을때
findBy+(fk를 관리하는 entity의 필드명에서 첫글자 대문자)+_+(fk를 관리하는 entity의 식별자(PK)필드명에서 첫글자 대문자)
package com.example.springProject.repository;
import com.example.springProject.entity.BoardEntity;
import com.example.springProject.entity.MemberEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface BoardRepository extends JpaRepository<BoardEntity, Long> {
List<BoardEntity> findByMemberEntity_MemberId(Long id);
}
위와 같이 FK값을 가지고 조회하는 방법입니다!