我正在尝试在数据库中保存问题列表。问题是说“如果列表中有2000个问题”,并且想将该列表保存到数据库中,则必须打2000次数据库。如何避免这种情况?
我将问题保存在数据库中的代码是:
public boolean saveQuestionsToDatabase(List<Question> eventQuestionList)
{
try
{
int saveQuestionCounter = 0;
for(Question question : eventQuestionList)
{
entityManager.merge(question);
saveQuestionCounter++;
}
return (eventQuestionList.size()==saveQuestionCounter);
}
catch (Exception e)
{
return false;
}
}
任何帮助/建议都将非常有帮助。预先感谢。
答案 0 :(得分:0)
您应该构建一个查询,将列表中的所有项目放在这里。
例如,oracle具有INSERT ALL
语句,您可以在其中编写多个插入,这要快得多。或者在MySql中可以这样做
INSERT INTO MyTable ( Column1, Column2, Column3 )
VALUES ('John', 123, 'Question 1'),
('Jane', 124, 'Question 2'),
('Billy', 125, 'Question 3'),
('Miranda', 126, 'Question 4');
取决于您使用的数据库
答案 1 :(得分:0)
您可以像下面一样使用Batch processing,并使用hibernate.jdbc.batch_size
将批次大小设置为20。
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
for ( int i=0; i<100000; i++ ) {
Customer customer = new Customer(.....);
session.save(customer);
if ( i % 20 == 0 ) { //20, same as the JDBC batch size
//flush a batch of inserts and release memory:
session.flush();
session.clear();
}
}
tx.commit();
session.close();