【问题标题】:Hibernate - Custom insert into databaseHibernate - 自定义插入数据库
【发布时间】:2011-04-12 01:10:08
【问题描述】:

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

我想做这个插入:

INSERT INTO TABLA (CAMPO1, CAMPO2) VALUES (?, crypt(?,'cdp'))

Crypt 是一个存储在我的数据库中的函数,我想在我的代码中插入它。实际上,当我想在我使用的数据库中插入一些东西时:

getHibernateTemplate().persist(obj);

但我想做一个“自定义”插入,因为我需要使用那个功能。

我使用的是休眠+注解:

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

但是必须从文件中读取密钥“cdp”,所以这个解决方案对我不起作用。

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

【问题讨论】:

  • 使用原始 SQL 是否可行(换句话说,让我们把 Hibernate 放在一边)?如果是,我不明白为什么@SQLInsert 不适合你。如果没有,恐怕 Hibernate 将无济于事。你能澄清一下吗?
  • 对我不起作用,因为我需要使用加密密钥获取字符串,所以我不知道如何在@SQLInsert 上引入它

标签: java hibernate orm


【解决方案1】:

这里有一个解决方案:

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();

【讨论】:

  • 您不应该有将字符串附加到您的 sql 语句的习惯。最好使用命名参数。
  • @NathanFeger 你的观点很重要,我编辑了这个答案来合并它
  • 有没有办法获取生成密钥as in JDBC
【解决方案2】:

就像 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();

【讨论】:

    猜你喜欢
    • 2019-10-01
    • 2017-04-14
    • 2016-03-03
    • 1970-01-01
    • 2014-11-20
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    相关资源
    最近更新 更多