#

Hibernate HQL to SQL Translation

For debugging purposes using hibernate it’s often usefull to have the generated SQL query to an appropriate HQL query.
But setting the hibernate configuration hibernate.show_sql to true leads to logging any query made within an application (which can be a lot in some applications). With the following class the hibernate API is used to generate the correct SQL query from a given HQL query and can be used anywhere to log the generated query.
    »more…

Vorsicht vor PreparedStatements mit LIKE

Gerade erlebt: Man sendet seine Datenbankabfragen per PreparedStatement, damit auch alles performant läuft, da die PreparedStatements schön gecacht werden können und auch davor bewahren, allzu einfach Opfer von SQL-Injections zu werden.
Doch Vorsicht! Benutzt man LIKE Statements und davon mehrere über mehrere Tabellen, so kann der Queryoptimizer einiger Datenbanken (,u. a. bei Oracle beobachtet,) beim vorkompilieren des Statements nicht genau beurteilen, wo und wie die Platzhalter im Statement stehen werden.
Die Folge kann dabei sein, das solche Abfragen zu Fulltablescanns führen und daher alles verlangsamen. In solchen Fällen sollte man sein SQL dynamisch aufbauen. Doch auch hier Vorsicht: Denn ein einfaches

LIKE username = '"+username+"'

eröffnet SQL-Injections alle Türen. Hiergegen hilft lediglich das Validieren und Prüfen der Benutzereingabe.