Hibernate verwendet falsches Query

DirkHo

Erfahrenes Mitglied
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:

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 = :param1 AND no.param2 = :param2.

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
 
Hallo,

das Problem ist gelöst. Es lag jedoch nicht an Hibernate, sondern wohl einfach daran, dass mein Workspace bzw. das Projekt in dem ich gearbeitet habe ziemlich "zerschossen" war. Nach commit auf das Repository, löschen des Projekts (aus dem Workspace und von der HDD) und erneutem Checkout, danach dann Tomcat aus dem Registerreiter "Server" löschen und das Projekt erneut hinzufügen ging auf einmal wieder alles.

Sehr komisch, aber ok.

Viele Grüße,

Dirk
 
Zurück