EntityManager.createNativeQuery(“SQL”, EntityClass.class).getSingleResult()
사용Book b = (Book) em.createNativeQuery("SELECT * FROM book b WHERE id = 1", Book.class).getSingleResult();
List<Object[]>
로 리턴한다.Object[]
에는 SqlResultSetMapping
에 지정된 순서대로 결과 엔티티 객체가 들어온다.<?xml version="1.0" encoding="UTF-8"?> <entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd" version="2.0"> <sql-result-set-mapping name="nativesql_mapping_example"> <entity-result entity-class="kr.pe.kwonnam.Book"> <field-result name="id" column="bk.id" /> <field-result name="title" column="bk.title" /> <field-result name="price" column="bk.price" /> <!-- Author writer, Long writerId 매핑이 함께 존재할경우 --> <field-result name="writerId" column="bk.writer_id" /> <field-result name="writer" column="bk.writer_id" /> </entity-result> <entity-result entity-class="kr.pe.kwonnam.Author"> <field-result name="id" column="at.id" /> <field-result name="name" column="at.name" /> </entity-result> </sql-result-set-mapping> </entity-mappings>
@ManyToOne
의 One 측에 대한 매핑 컬럼이 존재하는 경우에 해당 컬럼과 필드명도 매핑해야한다.Article
이 Board
의 자식이고 Article
에 대해 매핑할 경우Article.boardId
와 Article.board
필드 두개를 모두 매핑해두었다면boardId
→ article.board_id
와, board
→ article.board_id
이렇게 두 번의 필드 매핑을 해줘야 한다.in
파라미터 매핑을 지원in (:paramName)
in :paramName
형태로 쿼리를 만들어야 한다.