Bulk Operations attempt to create temporary tables, but user does not have permission to create table

Description

We have a joined-subclass relationship for some entities within our hibernate mapping. When delete operation is invoked on the related entities, bulk operations are getting triggered within hibernate-core. And bulk operations attempt to create temporary tables.

But the oracle user is not having any privilege to create tables. The oracle user which is used in the jdbc connection, only has permission to 'insert, update, delete, alter on' on set of tables in a particular schema. That oracle user does not have permission to create tables in that schema.

This is causing 'Insufficient Privelege' issue in Oracle.

Upon inspecting the code a little bit, I found that TemporaryTableBulkIdStrategy is being used by hibernate core. Even though these tables are not created, due to insufficient priveleges, an insert operation and then a delete operation is attempted, which is created an exception: 'org.hibernate.exception.SQLGrammarException: could not execute statement'

The logs are attached, for more analysis.

Even though, we have overriden the Dialect class's method: supportsTemporaryTables() to return false, still it goes ahead and tries attempting operations, on not yet created tables.

As I had debugged the hibernate code, getTemporaryIdTableName() was not returning null, but getTemporaryIdTableDDL() was returning null, since the temporaryIdTableDDL could not be created, because boolean for supportsTemporaryTable() was false.

But, still getTemporaryIdTableName() was used in other locations, during bulk operations for inserting and deleting and since Oracle did not find this table, as it did not exist, it threw an exception.

Providing the context in a summary:

When there are joined-subclass relationships defined in hibernate mapping and if the entities are involved in delete operation, hibernate uses temporaryIdBulkStrategy, which attempts to create temporary tables. But, the user used in jdbc connection does not have permission to create tables, due to which, temporary table creation fails and then, bulk operation fails, due to which, delete operation fails, due to which the application layer above fails.

Attachments

1

Activity

Show:

Former user May 6, 2017 at 2:42 AM

The following commit was inadvertently applied to this issue. It should have applied to HHH-11611:
https://github.com/hibernate/hibernate-orm/commit/461f6feac25c0cca9d207af7acb02925bd95794c

Vlad Mihalcea February 1, 2017 at 4:24 PM

For more details, check out this blog post as well.

Vlad Mihalcea February 1, 2017 at 12:12 PM

Applied Pull Request upstream.

Evandro Pires da Silva December 19, 2016 at 3:52 PM

Vlad Mihalcea December 7, 2016 at 2:33 PM

Let's see if we manage to get this PR as a starter.

Fixed

Details

Assignee

Reporter

Components

Fix versions

Affects versions

Priority

Created November 19, 2016 at 5:12 AM
Updated May 6, 2017 at 2:42 AM
Resolved February 1, 2017 at 12:12 PM