Is there any way to catch org.hibernate.exception.ConstraintViolationException
in Liberty application server ?
I have a this repository code :
@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class MarketRepository {
@PersistenceContext
private EntityManager em;
@Resource
private UserTransaction tx;
public void insert(Market market) {
try {
tx.begin();
em.persist(market);
tx.commit();
} catch (Exception ignore) {
}
}
}
I always receive this exception :
[INFO] Caused by: org.hibernate.exception.ConstraintViolationException: could not execute statement
[INFO] at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:109)
[INFO] at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
[INFO] at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
[INFO] at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)
[INFO] at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:200)
[INFO] at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3238)
[INFO] at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3763)
[INFO] at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:107)
[INFO] at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:604)
[INFO] at org.hibernate.engine.spi.ActionQueue.lambda$executeActions$1(ActionQueue.java:478)
[INFO] at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:723)
[INFO] at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:475)
[INFO] at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:348)
[INFO] at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:40)
[INFO] at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:102)
[INFO] at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1360)
[INFO] ... 20 more
[INFO] Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "ukmn9r4yewa9epwp1ekfsbm69gu"
[INFO] Detail: Key (exchange, symbol)=(COINEX, ZECUSDT) already exists.
[INFO] at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2533)
[INFO] at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2268)
[INFO] at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:313)
[INFO] at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:448)
[INFO] at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:369)
[INFO] at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:159)
[INFO] at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:125)
[INFO] at jdk.internal.reflect.GeneratedMethodAccessor1090.invoke(Unknown Source)
[INFO] at java.base/java.lang.reflect.Method.invoke(Method.java:567)
[INFO] at org.postgresql.ds.PGPooledConnection$StatementHandler.invoke(PGPooledConnection.java:428)
[INFO] at jdk.proxy11/jdk.proxy11.$Proxy136.executeUpdate(Unknown Source)
[INFO] at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.executeUpdate(WSJdbcPreparedStatement.java:520)
[INFO] at [internal classes]
[INFO] at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:197)
[INFO] ... 31 more
this is my server.xml config :
<dataSource jndiName="jdbc/jta-datasource" transactional="true">
<jdbcDriver id="database-driver" libraryRef="project-libs"/>
<properties databaseName="${database.name}" serverName="${database.hostname}" portNumber="${database.port}"
user="${database.username}" password="${database.password}"/>
</dataSource>
so, I want to ignore this exception, but still receive that !
How can fix this problem ?