6.1 명명된 쿼리
최대 절전 모드에서는 코드에 직접 쿼리를 저장할 수 없습니다. 대신 그는 쿼리 이름을 지정하고 주석으로 별도로 저장할 것을 제안합니다. 그런 다음 원하는 요청을 이름으로 직접 가져옵니다. 예:
@org.hibernate.annotations.NamedQueries({
@org.hibernate.annotations.NamedQuery(name = "Employee_FindById",
query = "from Employee where id = :id"),
@org.hibernate.annotations.NamedQuery(name = "Employee_FindAllEmployes",
query = "from Employee"),
@org.hibernate.annotations.NamedQuery(name = "Employee_UpdateEmployeeName",
query = "Update Employee set name = :newName where id = :id"),
...
})
Entity 클래스 앞에 주석을 추가할 수 있습니다. 쿼리 이름은 Entity에 연결되지 않습니다.
쿼리(쿼리)에 다양한 매개변수를 추가할 수도 있습니다.
@org.hibernate.annotations.NamedQuery(
name = "Employee_ FindAllEmployes",
query = "from Employee",
timeout = 1,
fetchSize = 10,
cacheable = true,
cacheMode = "GET"
)
createNamedQuery
이러한 요청을 사용하는 것은 매우 간단합니다. 이를 위해서는 메소드 대신 메소드를 사용해야 합니다 createQuery
.
Query<Employee> query = session.createNamedQuery("Employee_FindAllEmployes", Employee.class);
List<Employee> resultLIst = query.list();
6.2 네이티브 쿼리
간단하지만 매우 유용한 또 다른 기능은 NativeQuery 입니다 .
HQL을 사용하고 싶지 않지만 엔터티 매핑에 Hibernate를 사용하려는 경우 좋은 이전 SQL로 쿼리를 작성할 수 있습니다. 아무도 당신을 제한하지 않습니다.
이렇게 하려면 메서드 createNativeQuery()
대신 를 호출하기만 하면 됩니다 createQuery()
.
NativeQuery<Employee> query = session.createNativeQuery("select * from employee", Employee.class);
List<Employee> resultLIst = query.list();
쓰기만 하면 createNativeQuery
모든 것이 이전처럼 작동합니다. 이 메서드는 Query 클래스가 지원 하는 모든 메서드를 지원하는 NativeQuery 유형의 객체를 반환합니다 . 아무것도 당신을 위해 변경되지 않습니다.
또한 네이티브 SQL 쿼리는 명명된 쿼리 로 저장할 수도 있습니다 .
@org.hibernate.annotations.NamedNativeQueries(
@org.hibernate.annotations.NamedNativeQuery(name = "Employee_GetAll",
query = "select * from employee",
resultClass = Employee.class)
)
물론 여기에 작업을 위한 코드가 있습니다.
NativeQuery<Employee> query = session.createNamedQuery("Employee_GetAll", Employee.class);
List<Employee> resultLIst = query.list();
GO TO FULL VERSION