其他类型的请求

可用

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();
评论
  • 受欢迎
你必须先登录才能发表评论
此页面还没有任何评论