hibernate中的回滚事务(Rollback transaction in hibernate)

编程入门 行业动态 更新时间:2024-10-10 20:19:05
hibernate中的回滚事务(Rollback transaction in hibernate)

我已经创建了Hibernate“create”方法:

public PK create(T o) { try { getSession().beginTransaction(); PK rez = (PK) getSession().save(o); getSession().flush(); getSession().getTransaction().commit(); return rez; } catch (Exception e){ e.printStackTrace(); getSession().getTransaction().rollback(); return null; } }

当发生某些异常时(例如,DB中的唯一约束),则执行catch块。 出现一个错误后,我无法创建另一行......我对旧错误有异常。 例如,我创建用户“test”,然后我尝试添加具有相同名称“test”的用户,并且我在日志文件中遇到hibernate错误。 然后我尝试添加新的唯一用户,使用新的用户名“test2”,但仍然得到关于“test”用户的旧错误。 哪里有问题?

那么,真实的例子:

我添加了testuser1@ttt.org,之后,我尝试再次添加此用户(并获得异常(如下))...现在我正在尝试添加用户“testuser3@ttt.org”但我是再次收到有关testuser1@ttt.org的错误消息:

[2014-03-23T17:35:17.767+0200] [glassfish 4.0] [WARN] [] [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] [tid: _ThreadID=22 _ThreadName=http-listener-1(5)] [timeMillis: 1395588917767] [levelValue: 900] [[ SQL Error: 0, SQLState: 23505]] [2014-03-23T17:35:17.767+0200] [glassfish 4.0] [ERROR] [] [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] [tid: _ThreadID=22 _ThreadName=http-listener-1(5)] [timeMillis: 1395588917767] [levelValue: 1000] [[ ERROR: duplicate key value violates unique constraint "unique_Username" Detail: Key (username)=(testuser1@ttt.org ) already exists.]] [2014-03-23T17:35:17.767+0200] [glassfish 4.0] [SEVERE] [] [] [tid: _ThreadID=22 _ThreadName=Thread-4] [timeMillis: 1395588917767] [levelValue: 1000] [[ org.hibernate.exception.ConstraintViolationException: could not execute statement at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:129) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:136) at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:58) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3067) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3509) at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:88) at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:377) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:369) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:286) at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:339) at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:52) at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1234) at org.test.majas.dao.GenericDaoImpl.create(GenericDaoImpl.java:29) at org.test.majas.beans.TestBean.addUser(TestBean.java:80) ..... Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "unique_Username" Detail: Key (username)=(testuser1@ttt.org ) already exists. at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2161) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1890) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:560) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:417) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:363) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:133) ... 63 more]]

谢谢。

I've created Hibernate „create” method:

public PK create(T o) { try { getSession().beginTransaction(); PK rez = (PK) getSession().save(o); getSession().flush(); getSession().getTransaction().commit(); return rez; } catch (Exception e){ e.printStackTrace(); getSession().getTransaction().rollback(); return null; } }

When some exception occurs (for example, unique constraint in DB), then catch block executes. After one error, I cant create another rows… I get exception about old error. For example, I create user „test”, then I trying add user with same name „test” and I’m getting hibernate error in log file. Then I’m trying to add new unique user, with new username „test2”, but still get old error about „test” user. Where is the problem?

So, real example:

I'm added testuser1@ttt.org, after that, I tryed add this user once more (and gets exception(below))... Now I'm trying to add user "testuser3@ttt.org" but I'm getting this error about testuser1@ttt.org again:

[2014-03-23T17:35:17.767+0200] [glassfish 4.0] [WARN] [] [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] [tid: _ThreadID=22 _ThreadName=http-listener-1(5)] [timeMillis: 1395588917767] [levelValue: 900] [[ SQL Error: 0, SQLState: 23505]] [2014-03-23T17:35:17.767+0200] [glassfish 4.0] [ERROR] [] [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] [tid: _ThreadID=22 _ThreadName=http-listener-1(5)] [timeMillis: 1395588917767] [levelValue: 1000] [[ ERROR: duplicate key value violates unique constraint "unique_Username" Detail: Key (username)=(testuser1@ttt.org ) already exists.]] [2014-03-23T17:35:17.767+0200] [glassfish 4.0] [SEVERE] [] [] [tid: _ThreadID=22 _ThreadName=Thread-4] [timeMillis: 1395588917767] [levelValue: 1000] [[ org.hibernate.exception.ConstraintViolationException: could not execute statement at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:129) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:136) at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:58) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3067) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3509) at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:88) at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:377) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:369) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:286) at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:339) at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:52) at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1234) at org.test.majas.dao.GenericDaoImpl.create(GenericDaoImpl.java:29) at org.test.majas.beans.TestBean.addUser(TestBean.java:80) ..... Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "unique_Username" Detail: Key (username)=(testuser1@ttt.org ) already exists. at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2161) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1890) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:560) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:417) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:363) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:133) ... 63 more]]

Thanks.

最满意答案

所以问题出在Session ...每次出错后我都要创建新的Session ...

So, problem was in Session… After each error I must create new Session…

更多推荐

本文发布于:2023-08-07 18:33:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1465312.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:事务   hibernate   transaction   Rollback

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!