我有一个适用于Spring MVC和Hibernate的应用程序。如果单个用户插入记录,但是如果多个用户同时同时插入记录,则它可以正常工作。它显示了这个错误" Hibernate:org.hibernate.AssertionFailure:null id in"。我可以观察到这种情况正在发生,因为hibernate对所有记录的自动主要id genaration可能因为同一时间而相似。不确定。请帮忙。需要一个关键的解决方案。
我使用的代码如下
@Transactional
public Account addAccount(Account acct) {
session = sessionFactory.getCurrentSession();
session.save(acct);
session.flush();
session.clear();
return acct;
}
答案 0 :(得分:0)
如果您遇到并发问题,请考虑创建此类:
public AccountConcurrencyUtils {
public static synchronized Account addAccount(Account acct, SessionType session) {
session = sessionFactory.getCurrentSession();
session.save(acct);
session.flush();
session.clear();
return acct;
}
}
最后在你的代码中:
@Transactional
public Account addAccount(Account acct) {
return AccountConcurrencyUtils.addAccount(acct, session);
}
这应该可以防止并发问题,如果您使用Java 7,应该有更好的解决方法,但这应该是 修复你的问题,如果它是关于并发,如果没有,问题可能是其他。
我更新了代码,把你正在使用的Session类型,这应该适用于Java 5这样的旧Java版本