Hallo,
ich habe in meiner Web-Anwendung Hibernate im Einsatz. Nun habe ich das Problem, dass ein Query, je nach Parameter, anders aussieht.
Wenn z.B. Parameter 1 = null ist, dann soll Query 1 verwendet werden, wenn Parameter 1 != null ist, dann soll das Query 2 verwendet werden.
Hibernate verwendet aber partout query 1.
Hier mal der Code, mit dem ich mir die Session hole:
Hier der Code meiner DAO:
Wenn ich nun debugge und param2 ist value2, dann ist q auch schon vor der if-Abfrage if(param2 != null) FROM Number no WHERE no.param1 =
aram1 AND no.param2 =
aram2.
Warum ist das denn so? Kann mir da jmd. helfen?
Vielleicht liegt es am Caching der hibernate.cfg.xml?
Alle anderen Queries funktionieren einwandfrei - aber da ändert sich auch am Query nichts.
Vielen Dank und viele Grüße,
Dirk
ich habe in meiner Web-Anwendung Hibernate im Einsatz. Nun habe ich das Problem, dass ein Query, je nach Parameter, anders aussieht.
Wenn z.B. Parameter 1 = null ist, dann soll Query 1 verwendet werden, wenn Parameter 1 != null ist, dann soll das Query 2 verwendet werden.
Hibernate verwendet aber partout query 1.
Hier mal der Code, mit dem ich mir die Session hole:
Code:
public class DBFactory {
private static String HIBERNATE_CONFIG = "nbw_umweltpraemienrechner_hibernate.cfg.xml";
private static SessionFactory factory= new Configuration().configure(HIBERNATE_CONFIG).buildSessionFactory();
public static Session getInstance() {
return factory.openSession();
}
public static void closeSession(Session s) {
s.close();
}
}
Hier der Code meiner DAO:
Code:
public double getNumber(String param1, String param2) throws NoResultException {
String q= null;
String param1 = param1;
String param2 = param2;
Number number = null;
if (param2.equals("value2")) {
param2 = null;
}
q = "FROM Number no WHERE no.param1 = :param1 ";
double result = 0.0;
if(param2!= null) {
q += " AND no.param2 = :param2";
}
try {
Query query = getSession().createQuery(queryString);
query.setParameter("param1", param1);
if(param2 != null)
query.setParameter("param2", param2);
number = (Number) query.uniqueResult();
} catch (Exception e) {
throw new NoResultException("Blubb");
}
result = Number.getSum();
return result;
}
Wenn ich nun debugge und param2 ist value2, dann ist q auch schon vor der if-Abfrage if(param2 != null) FROM Number no WHERE no.param1 =


Warum ist das denn so? Kann mir da jmd. helfen?
Vielleicht liegt es am Caching der hibernate.cfg.xml?
Code:
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">DB</property>
<property name="hibernate.connection.username">User</property>
<property name="hibernate.connection.password">PW</property>
<property name="hibernate.connection.pool_size">10</property>
<property name="show_sql">true</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.cache.use_query_cache">false</property>
Alle anderen Queries funktionieren einwandfrei - aber da ändert sich auch am Query nichts.
Vielen Dank und viele Grüße,
Dirk