부산 프로젝트

김형우·2022년 5월 17일
0

외래키로 물린 엔티티를 네이티브 sql문으로 조회하는방법

package com.example.entity;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.ColumnResult;
import javax.persistence.ConstructorResult;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.NamedNativeQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.SqlResultSetMapping;
import javax.persistence.Table;

import org.hibernate.annotations.CreationTimestamp;

import com.example.dto.BoardDto;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@NoArgsConstructor
@ToString

@Entity // 엔티티 => 자동으로 테이블 생성
@Table(name = "BOARD1") // 테이블 명
@SequenceGenerator(name = "SEQ_BOARD1", sequenceName = "SEQ_BOARD1_NO", initialValue = 1, allocationSize = 1)

@NamedNativeQuery(
name = "board_projection_image_dto",
query = "SELECT NO, TITLE, IMAGE, IMAGETYPE FROM BOARD1 WHERE NO = :no",
resultSetMapping = "resultmap_board_projection_image_dto"
)
@SqlResultSetMapping(
name = "resultmap_board_projection_image_dto",
classes = @ConstructorResult(
targetClass = BoardDto.class,
columns = {
@ColumnResult(name = "NO", type = Long.class),
@ColumnResult(name = "TITLE", type = String.class),
@ColumnResult(name = "IMAGE", type = byte[].class),
@ColumnResult(name = "IMAGETYPE", type = String.class)
}
)
)

public class Board {

@Column(name = "NO") // 컬럼명
@Id // 기본키(중복X)
// 여기 추가되는 정보는 위에 생성한 시퀀스 사용
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_BOARD1")
private Long no = 0L; // 글번호

}


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class BoardDto {
private Long no;
private String title;
private byte[] image;
private String imagetype;

}


package com.example.repository;

import java.util.List;
import java.util.Map;

import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import com.example.dto.BoardDto;
import com.example.entity.Board;
import com.example.entity.BoardProjection;
import com.example.entity.BoardProjection1;

//https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.introduction
public interface BoardRepository extends JpaRepository<Board, Long> {

BoardEntity findByName(String name);

BoardProjection findByName(String name);

//Board Entity참조하기
@Query(name = "board_projection_image_dto", nativeQuery = true)
BoardDto querySelectOneDto(@Param("no") long no );

}


jdbc:h2:tcp://1.234.5.158:21521/여기는DB파일명;Mode=Oracle


profile
The best

0개의 댓글