如何在hibernate中编写复杂的查询?我的意思是像内部连接这样的SQL查询。如果我想从两个表访问数据,我需要做什么?
答案 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;
}
请忽略缺少参数使用或空检查的情况。只是举例而已。