I don't know about setString()
but if it is the same as setParameter()
then yes, it is enough to do that to prevent sql injection.
Update
By escaping data, means that you have to make sure you are not storing dangerous values in the database.
A quick example is for instance if you pass in the argument
String name = "<script>alert('Hello');</script>";
//insert this name into Mother, and then when you load it from the database, it will be displayed
List mothers = session.createQuery(
"select mother from Cat as cat join cat.mother as mother where cat.name = ?")
.setString(0, name)
.list();
to your query, then next time you load this from the database, and render it in your web browser, it will run the script.
You need to make sure your framework escapes all illegal characters, ie: changing <
to <
before you insert it in the database.
If your framework does not do this, you have to do it manually.
There are tons of libraries out there that correctly escapes code for you. Take a look at this question for instance and the answers there.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…