Hi!
Ich habe eine Liste von Objekten über welche ich iteriere und für jedes Objekt in der Liste muss ich zumindest 2 Datenbankabfragen absetzen (max 3 Statements). Kann ich hierbei irgendwie performen, denn im Moment dauert das Ganze sehr lange - nach jedem Stmt kommt ein commit etc. Gibt es Prepared Stmts in Hibernate, wie kann ich jene benützen?
Hier mal die Methode die min. 2 mal pro Objekt benutzt wird:
Ich habe eine Liste von Objekten über welche ich iteriere und für jedes Objekt in der Liste muss ich zumindest 2 Datenbankabfragen absetzen (max 3 Statements). Kann ich hierbei irgendwie performen, denn im Moment dauert das Ganze sehr lange - nach jedem Stmt kommt ein commit etc. Gibt es Prepared Stmts in Hibernate, wie kann ich jene benützen?
Hier mal die Methode die min. 2 mal pro Objekt benutzt wird:
Code:
public static List<FeatureModel> getNearestNeighbour4Point(final double[] point, final int nnNumRes,
final String unit, final int featureType, final int withinDistance, final int srid) {
StringBuffer point2 = new StringBuffer();
point2.append(" SDO_GEOMETRY( ");
point2.append(FeatureDB.POINT_GTYPE);
point2.append(", ");
point2.append(srid);
point2.append(", ");
point2.append("SDO_POINT_TYPE( ");
point2.append(point[0]);
point2.append(", ");
point2.append(point[1]);
point2.append(", null), null, null)");
StringBuffer sb = new StringBuffer();
sb.append(" SELECT {feature.*} ");
sb.append(" FROM feature {feature} ");
sb.append(" WHERE SDO_NN ( ");
sb.append(" feature.f_geom, ");
sb.append(point2.toString());
sb.append(", '");
sb.append(" SDO_NUM_RES = ");
sb.append(nnNumRes);
sb.append(" ");
sb.append(unit);
sb.append("', 1) = 'TRUE' AND SDO_WITHIN_DISTANCE( feature.f_geom, ");
sb.append(point2.toString());
sb.append(", ' DISTANCE = ");
sb.append(withinDistance);
sb.append(" ");
sb.append(unit);
sb.append("') = 'TRUE' AND f_ft_id = ");
sb.append(featureType);
Session session = HibernateUtil.getCurrentSession();
Transaction tx = null;
List<FeatureModel> list = null;
try {
tx = session.beginTransaction();
SQLQuery q = session.createSQLQuery(sb.toString());
q.addEntity("feature", FeatureModel.class);
list = q.list();
/* commit and close session */
tx.commit();
} catch (Exception e) {
if (tx != null) {
tx.rollback();
}
} finally {
session = null;
tx = null;
}
return list;
}