我是Hibernate的新手,我想抽象化hibernate会话的load()方法,以便可以使用它从数据库中加载任何任意对象。我正在创建一个实用程序类来持久化并在数据库中查找对象,因为正在使用多个类。

由于load()方法接受一个类名,后跟class关键字,所以我在努力做到这一点。我做了以下事情,但给了我错误::

Object ob = session.load(Object.class, id);


我该如何正确处理?

谢谢

最佳答案

没有指定类名就无法执行请求,因为Hibernate需要来自类的映射信息才能发出SQL请求。

您可以使用HQL。这样的事情(也许,您可以将查询参数用于id以更好地缓存)

public static <T> getById(String persistentClassName, Long id) {
  return (T) session.createQuery(String.format("from %s where id=%d",
      persistentClassName, id).uniqueResult();
}

Persitent p = getById("Persistent", 100L);


但是正如@sᴜʀᴇsʜᴀᴛᴛᴀ所建议的那样,这不是一个很好的设计。如果您想获得更方便的方法来设计此类实用程序方法,请查看fluent-hibernate。有了它,您可以执行此类请求

List<Transaction> transactions = H.<Transaction> request(Transaction.class) .innerJoin("customer").innerJoin("merchant").proj("customer.name") .proj("merchant.name").proj("amountDue").transform(Transaction.class).list();

09-25 17:18
查看更多