Hallo,
leider habe ich dieses Forum etwas zu spät entdeckt und deshalb erst mal in ein anderes Forum gepostet. da ich denke, dass es hier besser aufgehoben ist, will ich euch aber auch noch fragen.
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:
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:
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 = aram1 AND no.param2 = aram2.
Warum ist das denn so? Kann mir da jmd. helfen?
Vielleicht liegt es am Caching der hibernate.cfg.xml?
Code:
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>
<property name="hibernate.cache.use_second_level_cache">false</property>
Alle anderen Queries funktionieren einwandfrei - aber da ändert sich auch am Query nichts. Wenn ich im Debug über mein Programm laufe, so verhält es sich allgemein sehr komisch: Ich frage vorab nämlich z.B. auch ab, ob an der möglichen null-Stelle null vorliegt und will dann komplett in eine andere Methode gehen - was aber nicht gemacht wird. Ich habe das Gefühl, als würden Code-Stücke einfach ignoriert werden...
Hängt das irgendwie mit dem Caching von Hibernate zusammen oder kann das auch an meinem Tomcat vielleicht liegen?
Kann mir da vielleicht jemand helfen?
Vielen Dank und viele Grüße,
Dirk