【问题标题】:transform a simple query into hibernate将简单查询转换为休眠
【发布时间】:2013-08-29 18:16:43
【问题描述】:

我想把一个简单的查询转换成休眠

INSERT INTO TRXENTRIES (AMOUNT, BALANCE) 
VALUES (2500, (SELECT CURRENTBALANCE FROM CUSTOMER WHERE CUSTOMERID=1)+2500))

在休眠中使用 save() 的替代解决方案是什么?

更新我!

【问题讨论】:

标签: java hibernate subquery hql


【解决方案1】:

你必须:

  1. 创建一个实体来映射您的 INSERT 表(即 TrxEntry)
  2. 编写一个 HQL 查询来填充您的对象
  3. 使用 session.merge() 保存实体

或者,您可以使用会话对象的方法 createSqlQuery 来执行您的 SQL 查询并使用 session.executeUpdate() 完成它们。

示例:

实体 TrxEntry:

public class TrxEntry {
    private Double amount;
    private Double balance;

    -- add your get / set properties

    public Trxentry (Double amount, Double balance) {
        this.amount = amount;
        this.balance = balance;
    }
}

总部:

String hql = "select new TrxEntry(o.amount, o.balance)
from otherEntry o";

如果你想计算你的 o.balance 作为另一个子查询,你可以毫无问题地做

你的查询结果进入

Query q = session.createQuery(hql);
session.merge(q);

合并提供以保存您的实体

【讨论】:

  • In HQL, only the INSERT INTO … SELECT … is supported; there is no INSERT INTO … VALUES. HQL only support insert from another table. 所以 sql 查询概念不适用于我的情况,我只需要其他表中的一个值!
  • 如果您能提供关于session.merge()session.save() 的示例,我将不胜感激:)
  • 亲爱的区别我知道!我需要保存实体,并且该实体包含另一个表中的一个值!
  • @Shahid Ghafoor:亲爱的,解决方案在第 1 点。当您编写实体时。 BALANCE 是一个标量属性,因此如果您编写 HQL 查询,您将使用构造函数来填充该属性
猜你喜欢
  • 2012-03-09
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
相关资源
最近更新 更多