【问题标题】:Hibernate to execute multiple native sql statementsHibernate 执行多条原生 sql 语句
【发布时间】:2015-09-28 21:46:10
【问题描述】:

如何使用 hibernate native sql 在单个 sql 查询中执行多个 SQL 语句。

String sql = "SELECT * FROM user; SELECT * FROM product;";
UserVO valueObject = new UserVO();
databaseObject.select(sql, valueObject);

数据库对象

public List select(String sql, Object valueObject) throws Exception {
    Session session = Entitlement.getSessionFactory().openSession();
    session.beginTransaction();
    List list = session.createSQLQuery(sql).setProperties(valueObject).list();
    session.close();
    return list;
}

【问题讨论】:

  • 我不明白你在做什么。您希望select 返回的List 包含什么?
  • 我的期望是嵌套列表中的userproduct 列表,或者它如何用于多个sql 语句?
  • sql中有一个叫做UNION子句的东西,你可以试试。您将能够根据需要执行查询。另请记住,您需要使用别名来确保列名相似。选择 * 不是有效的操作 IMO

标签: java mysql hibernate


【解决方案1】:

使用 union 形成一个返回数据相同的查询 (选择 EMPLOYEEID 作为 id,EMPLOYEE_NAME 作为名称,“EMPOYEE”作为类型) UNION(选择 PRODUCTID 作为 id,Product_NAME 作为名称,“PRODUCT”作为类型)

形成一个实体来持有它

class EntityDetail {
    String id;
    String name;
    String type;
}

我添加了一个额外的列值类型来简单地识别来自哪个表行。是的,您需要使用所有有效注释形成一个适当的实体,上述实体只是示例。

【讨论】:

  • 受限于相同结构的数据,查询可以从多个不同结构的表中请求数据
  • @user2727195 如果理解您用简单的英语提出的问题“如何使用休眠原生 sql 在单个 sql 查询中执行多个 SQL 语句”。这意味着您想一次获取所有结果。而您现在正在做的事情(基于您的解决方案)您正在执行多个查询并将其全部存储在一个列表中。
【解决方案2】:

只是一种横向的方法。

public List<List<Object[]>> execute(String sqls, Object valueObject) throws Exception {
    String[] queries = sqls.split(";");
    List<List<Object[]>> result = new ArrayList<>();

    for(int i=0; i<queries.length; i++) {
        result.add(this.select(queries[i], valueObject));
    }
    return result;
}

【讨论】:

  • Ummm....您正在单独向数据库发出查询,所以显然它对您不起作用。
  • 有没有办法让hibernate执行多个查询?我相信我的尝试描述了我的期望
  • 我认为您使用这种方法只是在虚张声势,您正在分别执行每个查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-16
  • 2014-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-25
相关资源
最近更新 更多