关于ejb使用单例方式获取id时发生的死锁?

数据库中获取Key值我使用单例模式。获取ID值得方法作了同步处理
表结构如下:
id ,tablename,maxid

使用EJB调用获取ID的方法。

通过客户端编写的线程进行测试的时候会出现死锁。在网上查资料发现可能是因为在EJB事务中更新同一条记录出现的这个问题。但不知具体什么原因造成的这个问题。也不知道如何解决。请高手高手高高手帮助解释并提出解决方案。

但是如果我不做同步获取id,那通过客户端线程测试时会得到相同的id,明会出问题。
private int getNextKeyFromDB()
{
String sql1 = "UPDATE KeyTable SET keyValue = keyValue + 1 ";
String sql2 = "SELECT keyValue FROM KeyTable";
//execute the update SQL
//run the SELECT query
//示意性地返还一个数值
return 1000;
}
sql1和sql2无论什么顺序都会出问题。