Java Spring和Postgres事务错误
目前,我在Postgresql 9.5中使用Spring 4.0.6。我正在将一个Java Spring和Postgres事务错误,java,spring,hibernate,jpa,postgresql-9.5,Java,Spring,Hibernate,Jpa,Postgresql 9.5,目前,我在Postgresql 9.5中使用Spring 4.0.6。我正在将一个serviceclas1呼叫另一个serviceclas2,并获得一个事务异常,如下所示: 服务类 `@Transactional(readOnly = false, propagation = Propagation.REQUIRED,rollbackFor= { Throwable.class }) public Map<String, Object> storeUsersList(Map<S
serviceclas1
呼叫另一个serviceclas2
,并获得一个事务异常,如下所示:
服务类
`@Transactional(readOnly = false, propagation = Propagation.REQUIRED,rollbackFor= { Throwable.class })
public Map<String, Object> storeUsersList(Map<String, Object> mapOfParams) throws Exception {
Map<String, Object> returnMap = new HashMap<String, Object>();
if (userListToStore != null && !userListToStore.isEmpty()) {
integrationService.manangePassCodes(org,userListToStore.size());
for (Users singleUser : userListToStore) {
try {
getEm().update(singleUser);`
我在这里遇到了一个例外-
getEm().update(单用户)代码>
异常SQL状态[25P02];错误代码[0];无法提取
结果集
我刚刚读到有关Postgres事务的错误,但无法获取Hibernate应使用的内容。不是100%确定是否是这种情况,但在您的storeUsersList
方法中,您似乎正在重用存储在实例变量userListToStore
中的现有用户集合
此用户集合不是从事务内部初始化的,因此当您使用容器管理的事务时,实体最有可能被分离
在我看来,您应该在执行更新之前合并每个实体,以便持久性上下文能够识别它们:
for (Users singleUser : userListToStore) {
try {
getEm().merge(singleUser);
getEm().update(singleUser);
感谢您的快速帮助,我通过检查更多信息并阅读上面的错误消息,解决了我的问题。我从一个事务调用了许多事务,这意味着在我的情况下,由于上一个事务错误,next被中止,因为它在DB上有写锁。在整理前一笔交易之前,不会保存当前交易以前的事务有愚蠢的错误getEm().update(单用户)
当前没有错误的事务integrationService.manangePassCodes(org,userListToStore.size());代码>
一段代码
因为两者都属于不同的服务,但是我已经用
@Transactional(propagation=propagation.REQUIRED,readOnly=false,rollboor={Throwable.class})
propagation=propagation.REQUIRED意味着它将支持当前事务,如果不存在,则创建一个新事务。
所以它给了我错误25P02-事务中止
参考链接1-
参考链接2-
参考链接3-谢谢,但我通过查看更多信息并阅读此错误消息解决了我的问题,我得出结论,保存错误不在getEm().update(singleUser)中代码>很抱歉已有评论。谢谢,但我已经解决了我的问题,通过检查更多和阅读有关此错误消息上面。这意味着上一个事务被中止,下一个事务无法继续,保存错误不在getEm().update(singleUser)处代码>而它位于integrationService.manangePassCodes(org,userListToStore.size())代码>代码参考链接1-参考链接2-
for (Users singleUser : userListToStore) {
try {
getEm().merge(singleUser);
getEm().update(singleUser);