如何在ejb Web服务中结束事务性Web服务之前获取持久化对象的Id?

问题描述:

我正在开发一个带有注释为@stateless和@Webservice的EJB和Web服务的SOA应用程序。在我的一个Web方法中,我的操作从客户端获取DTO对象,并在持久化之后返回它。实际上,我需要在Web服务DTO响应中将我的对象的持久标识返回给客户端。但ejb在完成操作后提交我的插入。所以在调用“坚持”后,我没有自动生成的ID呢!如何在ejb Web服务中结束事务性Web服务之前获取持久化对象的Id?

任何标准的解决方案,请吗?

// force the entityManager to write all the pending changes to the database, and thus generate the ID 
entityManager.flush(); 

// get the ID assigned to the newly persisted entity 
Long generatedId = entity.getId(); 
+0

在webservice会话bean中注入entityManager真的很标准吗?我只是将它注入一个通用的抽象dao bean中,它处理我所有的crud操作。 –

+1

然后向DAO添加一个flush方法,并从web服务调用dao.flush()。 –

+0

这似乎是一个很好的建议。谢谢 :) –