Я работаю над Spring-boot (Spring-DATA) и hibernate.Я пытаюсь вставить в свои таблицы и добавил @Transactional
для отката, если возникнет какая-либо проблема.
У меня есть класс, который заботится о сохранении в БД.
PersistToDB.java
@Transactional
public void insertToTables() {
//Insert into Table1
//Insert into Table2 (has a unique constraint on a column)
//Insert into Table3
}
и я вызываю вышеуказанный класс из моего класса обслуживания, как показано ниже:
public class Service {
persistToDB.insertToTables();
}
При выполнении этого Hibernate просто приводит к Constraint violation Exception for Uniuqe Key
, даже если в Таблице 2 нет записи сэто значение столбца и откатывает всю транзакцию.Я не уверен, в чем здесь проблема.Любые предложения полезны.
Исключение:
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Violation of UNIQUE KEY constraint 'UK1wyjkexd8xlc0e5r0jcim6c5q'. Cannot insert duplicate key in object 'dbo.table2'. The duplicate key value is (value).
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:256) ~[mssql-jdbc-7.2.1.jre8.jar:na]
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1621) ~[mssql-jdbc-7.2.1.jre8.jar:na]
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:592) ~[mssql-jdbc-7.2.1.jre8.jar:na]
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:522) ~[mssql-jdbc-7.2.1.jre8.jar:na]
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7194) ~[mssql-jdbc-7.2.1.jre8.jar:na]
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2930) ~[mssql-jdbc-7.2.1.jre8.jar:na]
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:248) ~[mssql-jdbc-7.2.1.jre8.jar:na]
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:223) ~[mssql-jdbc-7.2.1.jre8.jar:na]
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(SQLServerPreparedStatement.java:471) ~[mssql-jdbc-7.2.1.jre8.jar:na]
at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61) ~[HikariCP-3.2.0.jar:na]
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java) ~[HikariCP-3.2.0.jar:na]
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:175) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
... 154 common frames omitted