From b936f21b95577701544a274177c50d1eee4eff96 Mon Sep 17 00:00:00 2001 From: Gail Badner Date: Sun, 18 Sep 2016 21:44:54 -0700 Subject: [PATCH] HHH-11038 : Invalid statement generated for @MapKeyColumn(updatable=false) for @OneToMany (cherry picked from commit 87e69c9d3455cf2fbf9fdf796a9c6eb1aa434358) --- .../collection/OneToManyPersister.java | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/OneToManyPersister.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/OneToManyPersister.java index 75fc3827005b..d41094a7fd41 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/OneToManyPersister.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/OneToManyPersister.java @@ -84,7 +84,11 @@ protected String generateDeleteString() { .addPrimaryKeyColumns( keyColumnNames ); if ( hasIndex && !indexContainsFormula ) { - update.addColumns( indexColumnNames, "null" ); + for ( int i = 0 ; i < indexColumnNames.length ; i++ ) { + if ( indexColumnIsSettable[i] ) { + update.addColumn( indexColumnNames[i], "null" ); + } + } } if ( hasWhere ) { @@ -108,7 +112,11 @@ protected String generateInsertRowString() { .addColumns( keyColumnNames ); if ( hasIndex && !indexContainsFormula ) { - update.addColumns( indexColumnNames ); + for ( int i = 0 ; i < indexColumnNames.length ; i++ ) { + if ( indexColumnIsSettable[i] ) { + update.addColumn( indexColumnNames[i] ); + } + } } //identifier collections not supported for 1-to-many @@ -132,7 +140,11 @@ protected String generateUpdateRowString() { update.addPrimaryKeyColumns( new String[] {identifierColumnName} ); } if ( hasIndex && !indexContainsFormula ) { - update.addColumns( indexColumnNames ); + for ( int i = 0 ; i < indexColumnNames.length ; i++ ) { + if ( indexColumnIsSettable[i] ) { + update.addColumn( indexColumnNames[i] ); + } + } } return update.toStatementString(); @@ -149,7 +161,11 @@ protected String generateDeleteRowString() { .addColumns( keyColumnNames, "null" ); if ( hasIndex && !indexContainsFormula ) { - update.addColumns( indexColumnNames, "null" ); + for ( int i = 0 ; i < indexColumnNames.length ; i++ ) { + if ( indexColumnIsSettable[i] ) { + update.addColumn( indexColumnNames[i], "null" ); + } + } } if ( getFactory().getSessionFactoryOptions().isCommentsEnabled() ) { @@ -191,7 +207,7 @@ private void writeIndex( boolean resetIndex, SessionImplementor session) { // If one-to-many and inverse, still need to create the index. See HHH-5732. - if ( isInverse && hasIndex && !indexContainsFormula ) { + if ( isInverse && hasIndex && !indexContainsFormula && ArrayHelper.countTrue( indexColumnIsSettable ) > 0 ) { try { if ( entries.hasNext() ) { int nextIndex = resetIndex ? 0 : getSize( id, session );