其他類型的請求

開放

6.1 命名查詢

Hibernate 允許您不直接在代碼中存儲查詢。相反,他建議給查詢名稱並將它們作為註釋單獨存儲。好吧,那就直接通過它的名字來接受想要的請求吧。例子:

@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"),
...
})

可以在任何實體類之前添加註釋:查詢名稱不綁定到任何實體。

還可以在查詢(query)中添加各種參數:

@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,一切都會像以前一樣工作。此方法返回一個NativeQuery類型的對象,它支持Query類支持的所有方法。什麼都不會為你改變。

此外,Native SQL Query也可以存儲為Named Queries

@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();
留言
  • 受歡迎
你必須登入才能留言
此頁面尚無留言