Hibernate - 自定义插入数据库

Mic*_*hel 12 java orm hibernate

我写这篇文章知道是否有人知道如何做到这一点:

我想做这个插入:

INSERT INTO TABLA (CAMPO1, CAMPO2) VALUES (?, crypt(?,'cdp'))
Run Code Online (Sandbox Code Playgroud)

Crypt是存储在我的数据库中的函数,我希望在我的代码中执行插入操作.实际上,当我想在数据库中插入一些东西时,我使用:

getHibernateTemplate().persist(obj);
Run Code Online (Sandbox Code Playgroud)

但我想做一个"自定义"插入,因为我需要使用该功能.

我正在使用hibernate +注释:

@org.hibernate.annotations.SQLInsert (sql = "INSERT INTO TABLA (CAMPO1, CAMPO2) VALUES (?, crypt(?,'cdp'))")
Run Code Online (Sandbox Code Playgroud)

但是必须从文件中提取密钥"cdp",因此该解决方案对我不起作用.

我想在我的代码上使用一个方法来执行SQL查询(INSERT查询)

Mic*_*hel 21

这是一个解决方案:

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();
Run Code Online (Sandbox Code Playgroud)

  • 你不应该在做字符串的habbit附加到你的sql语句.最好使用命名参数. (8认同)
  • @NathanFeger 你的观点非常重要,我编辑了这个答案以将其纳入其中 (2认同)

Hea*_*vyE 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();
Run Code Online (Sandbox Code Playgroud)