gpt4 book ai didi

hibernate - chalice 3 : SessionFactory Bean is not injecting in Service

转载 作者:行者123 更新时间:2023-12-02 14:39:14 26 4
gpt4 key购买 nike

我正在尝试从文件中批量添加数据,我从该门户中读取了一种方法来使用批处理批量添加数据

http://krixisolutions.com/bulk-insert-grails-gorm/

当我使用这种技术并根据它更改我的应用程序时,我的代码无法正常工作,我已经工作了几天来寻找批量保存数据以加快处理速度的方法,通过简单的手动刷新需要 4 分钟来保存 1000数据库中的数据行,我想让这个时间尽可能少

在下面给出的代码中,每当我调试它在 SessionFactory 之后停止的代码时,我不明白问题是什么,因为我对 grails 非常陌生,并且对 sessionFactory 或事务没有任何经验。

这是我的代码:

   runAsync {
res = benchmark { result ->
Session session = SessionFactory.openSession()
Transaction tx = (Transaction)session.beginTransaction()




groovyFile.eachLine {


String[] tagData = it.split(',')

def isTimeToLive = true


if (isTimeToLive) {
try {
caller = new Caller(callingNumber:
tagData.getAt(0), callerName: tagData.getAt(1))
session.save(caller)
} catch (Exception ex) {
log.error(ex.getMessage())
}

caller.validate()
if (caller.hasErrors()) {
println("message", "Invalid calling number. Digits can only be from 10 to 15.")
}

callCallerList = new CallCallerList(caller: caller, callerList: callerList)
callCallerList.validate()
if (callCallerList.hasErrors()) {
println("message", "Invalid calling number. Digits can only be from 10 to 15.")
} else {
session.save(callCallerList)
}

}
count++;
if (count % 100 == 0) {
session?.flush()
session?.clear()
}
}
tx.commit();
session.close();

}


}

}

最佳答案

在 Grails 中,您可以简单地使用 withSession{}withTransaction{} :

我会这样写:

Caller.withTransaction{
int count = 0
groovyFile.splitEachLine( ',' ){ String[] line ->
Caller caller = new Caller( callingNumber:line[ 0 ], callerName:line[ 1 ] )
if( !caller.save( flush:0 == count % 100 ) ) println caller.errors
count++
}
}

您不应该真正手动处理 session 。

更新

Why transaction do a rapid insertion while sessions fail?



不会。通常,事务会自动包装 session ,所以 withSession{}withTransaction{} 一样快.

Is it because session was not cleaning the cache properly or because each sql query was doing its own flush?



是的,除非您 flush,否则不会清理 session 的缓存。它或 close它。这是在我的代码或任何关于 GORM 或 Hibernate 中的批量处理的建议中所做的。

关于hibernate - chalice 3 : SessionFactory Bean is not injecting in Service,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53154853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com