使用单个或优化查询批量插入

时间:2013-10-08 06:08:37

标签: java mysql sql-server hibernate hql

我正在使用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从另一个表中提取数据。

我也读过有关批量处理的内容,但这也会触发多个插入查询,我不想使用它。

希望有人能帮助我。

1 个答案:

答案 0 :(得分:0)

我建议您使用像

这样的hibernate实体
@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
}

然后你可以像往返一样更新,例如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();

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