Package org.hibernate.jdbc
Interface Expectation
- All Known Implementing Classes:
Expectation.None,Expectation.OutParameter,Expectation.RowCount
public interface Expectation
Defines an expected DML operation outcome.
Used to verify that a JDBC operation completed successfully.
The two standard implementations are Expectation.RowCount for
row count checking, and Expectation.OutParameter for checking
the return code assigned to an output parameter of a
CallableStatement. Custom implementations are
permitted.
An Expectation is usually selected via an annotation,
for example:
@Entity
@SQLUpdate(sql = "update Record set uid = gen_random_uuid(), whatever = ? where id = ?",
verify = Expectation.RowCount.class)
class Record { ... }
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeInterfaceDescriptionstatic classNo return code checking.static classEssentially identical toExpectation.RowCountexcept that the row count is obtained via an output parameter of a stored procedure.static classRow count checking. -
Method Summary
Modifier and TypeMethodDescriptiondefault booleanIs it acceptable to combine this expectation with JDBC statement batching? If this method returnsfalse, the use of batch updates is disabled.default intThe number of JDBC parameters this expectation uses.default intprepare(PreparedStatement statement) Perform any special statement preparation, for example, registration of OUT parameters.default voidvalidate(boolean callable) Check that this implementation is compatible with the kind ofPreparedStatementit will be called with.voidverifyOutcome(int rowCount, PreparedStatement statement, int batchPosition, String sql) Perform verification of the outcome of the JDBC operation based on the type of expectation defined, after execution of the givenPreparedStatement.
-
Method Details
-
canBeBatched
default boolean canBeBatched()Is it acceptable to combine this expectation with JDBC statement batching? If this method returnsfalse, the use of batch updates is disabled.- Returns:
- True if batching can be combined with this expectation; false otherwise.
- See Also:
-
getNumberOfParametersUsed
default int getNumberOfParametersUsed()The number of JDBC parameters this expectation uses. For example,Expectation.OutParameterrequires a single OUT parameter for reading back the number of affected rows. -
verifyOutcome
void verifyOutcome(int rowCount, PreparedStatement statement, int batchPosition, String sql) throws SQLException, HibernateException Perform verification of the outcome of the JDBC operation based on the type of expectation defined, after execution of the givenPreparedStatement. When a SQL statement is executed viaPreparedStatement.executeUpdate(),verifyOutcome()is called exactly once. WhenStatement.executeBatch()is used to execute a batch update, this method is called once for each element of the batch.- The argument to
rowCountis usually the number of table rows affected by execution of the SQL statement viaexecuteUpdate(). However, in the case whereexecuteBatch()is used to execute a batch update, it might beStatement.EXECUTE_FAILEDorStatement.SUCCESS_NO_INFO. - The argument to
batchPositionis negative unlessexecuteBatch()is used to execute a batch update, in which case it is the position within the batch of the row count being verified.
- Parameters:
rowCount- The RDBMS reported "number of rows affected"statement- The statement representing the operationbatchPosition- The position in the batch (if batching), or-1if not part of a batchsql- The SQL backing the prepared statement, for error reporting and logging purposes- Throws:
SQLException- Exception from the JDBC driver.HibernateException- Problem processing the outcome.- See Also:
- The argument to
-
prepare
Perform any special statement preparation, for example, registration of OUT parameters.- Parameters:
statement- The statement to be prepared- Returns:
- The number of bind positions consumed (if any)
- Throws:
SQLException- Exception from the JDBC driverHibernateException- Problem performing preparation.- See Also:
-
validate
Check that this implementation is compatible with the kind ofPreparedStatementit will be called with. Implementors should throw aMappingExceptionif the configuration is not supported. This operation is called when Hibernate starts up, so that incompatibilities are detected and reported as early as possible.- Parameters:
callable- true if thisExpectationwill be called with aCallableStatement.- Throws:
MappingException- Since:
- 6.5
-