1,9 → 1,11 |
package ak.hostadmiral.util; |
|
import java.util.Collection; |
import java.util.Map; |
|
import net.sf.hibernate.*; |
import net.sf.hibernate.cfg.*; |
import net.sf.hibernate.type.Type; |
|
public class HibernateUtil |
{ |
133,6 → 135,69 |
hb.transaction = null; |
} |
|
public static Collection pageableList(CollectionInfo info, int pageSize, int pageNumber, |
String query, String[] returnAliases, Class[] returnClasses, |
Object[] values, Type[] types) |
throws ModelException |
{ |
try { |
// find the collection size if needed |
if(info != null) { |
Query sizeq = HibernateUtil.currentSession().createSQLQuery( |
"select count(*) as {c} from " + query, |
"c", Integer.class); |
|
if(values != null && types != null) { |
for(int i = 0; i < values.length; i++) |
sizeq.setParameter(i, values[i], types[i]); |
} |
|
info.setSize(((Integer)sizeq.iterate().next()).intValue()); |
} |
|
// find the collection |
Query hq = HibernateUtil.currentSession().createSQLQuery( |
query, returnAliases, returnClasses); |
|
if(values != null && types != null) { |
for(int i = 0; i < values.length; i++) |
hq.setParameter(i, values[i], types[i]); |
} |
|
if(pageSize > 0) { |
hq.setFirstResult(pageSize * pageNumber); |
hq.setMaxResults(pageSize); |
} |
|
return hq.list(); |
} |
catch(HibernateException ex) |
{ |
throw new ModelException(ex); |
} |
} |
|
public static String formOrderClause(Integer[] sortingKeys, Map fieldMap) |
throws ModelException |
{ |
if(sortingKeys == null || sortingKeys.length == 0) return ""; |
|
StringBuffer buf = new StringBuffer(" order by "); |
|
for(int i = 0; i < sortingKeys.length; i++) { |
if(i > 0) buf.append(","); |
|
String field = (String)fieldMap.get(sortingKeys[i]); |
if(field == null) |
throw new ModelException( |
"Field for sorting key " + sortingKeys[i] + " not found"); |
|
buf.append(field); |
} |
|
return buf.toString(); |
} |
|
static class HibernateBean |
{ |
public Session session; |