【问题标题】:Bulk insertion using single or optimized query使用单个或优化查询进行批量插入
【发布时间】:2013-10-14 22:33:09
【问题描述】:

我正在使用 Hibernate 3。

我的问题是,如何使用 Hibernate 或 HQL 使用单个插入查询来优化多个插入查询或触发多个查询。

我已经浏览了以下链接:

how to make HQL that will generate SQL to insert multiple values in one statement?

HQL Bulk insert

我发现我的问题略有不同。我的疑问是:

INSERT INTO scoring.table_a (a_id, a_name) VALUES (1, 'a');
INSERT INTO scoring.table_a (a_id, a_name) VALUES (2, 'b');
....
...
..
INSERT INTO scoring.table_a (a_id, a_name) VALUES (1000, 'd');

多列而不是单列的值集不同。此外,输入的值是计算出来的,而不是直接从某个表中获取的。所以INSERT INTO... SELECT也可能无法使用。因为据我所知,INSERT INTO... SELECT 从另一个表中获取数据。

我还阅读了有关批处理的文章,但这也会触发多个插入查询,我不想使用。

希望任何人都可以帮助我。

【问题讨论】:

  • 你知道吗INSERT INTO MyTable (FirstCol, SecondCol) SELECT 'First' ,1 UNION ALL SELECT 'Second' ,2 UNION ALL SELECT 'Third' ,3
  • @RabNawaz 感谢您的快速回复。我不知道这个查询。但是根据你的建议,我在网上搜索发现,这个查询是纯 SQL。您能告诉我如何将其转换为 HQL 吗?

标签: java mysql sql-server hibernate hql


【解决方案1】:

我可以建议你在这里使用像

这样的休眠实体
@Entity(name = table_a)
public class TableAEntity{

@id
@Column(name="a_id")
String aId;

@Column(name = "a_name")
String aName;

public TableAEntity(String aId, String aName){
  this.aId=aid;
  this.aName =aName;
}

// Getter setter for column aId, aName
}

然后你可以像在 go 中更新,示例取自 here

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
for ( int i=0; i<100000; i++ ) {
    TableAEntity entity= new TableAEntity(.....);
    session.save(entity);
}
tx.commit();
session.close();

更多方法在同一链接中提供。

【讨论】:

  • 这会触发一个插入查询还是多个插入查询?
猜你喜欢
  • 1970-01-01
  • 2016-01-06
  • 2013-11-19
  • 1970-01-01
  • 2012-11-10
  • 2019-06-24
  • 2014-01-16
  • 2016-03-30
  • 2020-08-18
相关资源
最近更新 更多