数据库+休眠

时间:2011-12-29 04:43:00

标签: mysql hibernate

如何在hibernate中编写复杂的查询?我的意思是像内部连接这样的SQL查询。如果我想从两个表访问数据,我需要做什么?

2 个答案:

答案 0 :(得分:1)

关于如何配置hibernate以访问MySql,check this example

我了解您所说的“使用网络服务”的部分。

你想通过网络服务使用hibernate做一些操作吗?如果是,请编写一个在hibernate上执行操作的方法,并简单地公开该方法。

答案 1 :(得分:0)

您的复杂查询可以调用此方法

 public <T> List<T> getCustomRecordsForSQL(String sqlQueryStr, T instance) {
   Session sess = initSession();
   HIFILogger.logInfo(sqlQueryStr);
   List<T> retval = null;
   try {
      Query query = sess.createSQLQuery(sqlQueryStr)
            .setResultTransformer(Transformers.aliasToBean(instance.getClass()));
      sess.setCacheMode(CacheMode.IGNORE);
      retval = query.list();
      if (retval != null) {
         HIFILogger.logInfo("Record Returned - " + retval.size());
      }
   } catch (HibernateException e) {
      HIFILogger.logInfo(e.getMessage());
      e.printStackTrace(); //FIXME
      throw e;
   } finally {
      if (sess != null) {
         sess.close();
      }
   }
   return retval;
}

调用方方法应发送查询本身和类,例如

@Override
public List<Employee> getRecordsForClassName(Integer userID) throws UserGoalException {
    String query = "SELECT Employee.*, Employee.Name, Org.Description FROM Employee,OrgWHERE Employee.GoalID = Org.UserID AND Employee.userID = "
            + userID;
    List<Employee> empGoalList= getCustomRecordsForSQL(query, new Employee());
    return empGoalList;
}

请忽略缺少参数使用或空检查的情况。只是举例而已。