Entity에 @NamedQuery 어노테이션을 통해 쿼리를 지정해 줍니다. 쉽게 말하면 미리 이름을 부여해서 재활용할 수 있는 JPQL입니다.
사용 방법
도메인 클래스에 @NamedQuery 또는 @NamedNativeQuery를 정의합니다.
2개 이상의 Query를 정의하려면 @NamedQueries 또는 @NamedNativeQueries를 사용하면 됩니다.
Primary Key 가 되는 칼럼은 @Id를 사용하여 지정합니다.
테이블의 칼럼명과 도메인 클래스의 필드명이 다를 경우 @Column을 이용하여 지정할 수 있습니다.
클래스 생성
위의 설명의 어노테이션을 사용하여 도메인 클래스를 생성합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
@Entity @NamedQueries({ @NamedQuery(name = "Team.query1", query = "select t.id from Team t where t.name = 'test1'"), @NamedQuery(name = "Team.query2", query = "select t.name from Team t where t.name = ?1"), }) @NamedNativeQueries({ @NamedNativeQuery(name = "Team.nativeQuery1", query = "select t.id from tb_team t where t.name = 'test1'"), @NamedNativeQuery(name = "Team.nativeQuery2", resultClass = Team.class, query= "select * from tb_team t where t.name = '?1") }) @Table(name = "tb_team") publicclassTeam{ @Id privateint id;
@Query(value = "select * from tb_team t where t.name = 'test1'", nativeQuery = true) List<Team> testNativeQuery();
@Query(value = "select t.id from #{#entityName} t where t.name like :name%", nativeQuery = true) List<String> testNativeQuery(@Param("name") String name);