Mic*_*l Z 4 spring hibernate jpa transactions transactional
是否可以在标记为Spring的@Transactional的方法中执行提交?
@PersistenceContext
private EntityManager em;
@Transactional(propagation = Propagation.REQUIRED)
public void saveMembersWithMultipleCommits(List<Member> members)
throws HibernateException
{
Iterator<Member> it = members.iterator();
while (it.hasNext())
{
while (it.hasNext())
{
Member wsBean = it.next();
em.persist(wsBean); // overall commit will be made after method exit
log.info("Webservices record " + wsBean + " saved. " + i++);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想在说出每500个项目之后提交DB.这可能与上述背景有关吗?
您的问题表明您错放了交易边界.
您可以将持久调用移动到私有方法中,并使该方法为事务性而非外部方式.此方法一次可以接受500个成员,然后在退出时提交.
不,您需要以编程方式使用,例如,TransactionTemplateAPI.在这里阅读更多.
它看起来像
while (it.hasNext())
{
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
protected void doInTransactionWithoutResult(TransactionStatus status) {
int counter = 0;
while (it.hasNext() && counter++ < 500) {
Member wsBean = it.next();
em.persist(wsBean);
log.info("Webservices record " + wsBean + " saved. " + i++);
}
}
);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18599 次 |
| 最近记录: |