前两天接到学校的一个项目,做学校的一个校工会信息管理系统,遇到一个需求:在网页管理界面上操作,从Excel读取N条数据,插入到数据库中,相同工号的数据无需插入.
想用三大框架来做这个系统,但是遇到一个问题,Transaction遇到异常会回滚,并中断插入操作,后续的数据将无法插入到数据库,一时间没找到合适的方法来解决,.于是乎只好用原生SQL语句来操作.
解决方法:
先用JXL读取Excel,然后利用事务+createSQLQuery插入数据到数据库,示例代码如下:
@Test
public void test() {
Session session = HibernateSessionFactory.getSession();
//执行事务
Transaction tx = session.beginTransaction();
for (int i = 0; i < 100; i++) {
//sql作用:忽略相同数据
session.createSQLQuery(
"insert ignore into test values(" + i + ",'a')")
.executeUpdate();//注意,插入要加上executeUpdate,否则插入不成功
}
//提交事务
tx.commit();
}