외래키로 물린 엔티티를 네이티브 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