我写这篇文章是为了知道有人知道怎么做:
我想做这个插入:
INSERT INTO TABLA (CAMPO1, CAMPO2) VALUES (?, crypt(?,'cdp'))
Crypt是存储在我的数据库中的函数,我希望在我的代码中执行插入操作。实际上当我想在数据库中插入一些东西时我会使用:
getHibernateTemplate().persist(obj);
但我想做一个“自定义”插入,因为我需要使用该功能。
我正在使用hibernate + annotations:
@org.hibernate.annotations.SQLInsert (sql = "INSERT INTO TABLA (CAMPO1, CAMPO2) VALUES (?, crypt(?,'cdp'))")
但是必须从文件中读取密钥“cdp”,因此该解决方案对我不起作用。
我想在我的代码上使用一个方法来执行SQL查询(INSERT查询)
答案 0 :(得分:20)
这是一个解决方案:
Query query = getSession().createSQLQuery("INSERT INTO TABLA (CAMPO1, CAMPO2) VALUES (:valor1, encripta(:valor2, :key))");
query.setParameter("valor1", valor1);
query.setParameter("valor2", valor2);
query.setParameter("key", key);
query.executeUpdate();
答案 1 :(得分:18)
与Nathan Feger提到的一样,命名参数更清洁,更安全。在这种情况下,可以使用以下代码执行语句:
Query query = getSession().createSQLQuery("INSERT INTO TABLA (CAMPO1, CAMPO2) VALUES (:valor1, encripta(:valor2, :key))");
query.setParameter("valor1", valor1);
query.setParameter("valor2", valor2);
query.setParameter("key", key);
query.executeUpdate();