Skip to content

Commit d8a2d61

Browse files
committed
[#1744] Fix bug when updating with RowId
Related to Hibernate ORM issue [HHH-17045](https://hibernate.atlassian.net/browse/HHH-17045): Unable to locate parameter for RESTRICT - UPDATE error when updating entity with RowId
1 parent 1c00a6c commit d8a2d61

File tree

4 files changed

+27
-4
lines changed

4 files changed

+27
-4
lines changed

hibernate-reactive-core/src/main/java/org/hibernate/reactive/adaptor/impl/PreparedStatementAdaptor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ public ParameterMetaData getParameterMetaData() {
275275

276276
@Override
277277
public void setRowId(int parameterIndex, RowId x) {
278-
throw new UnsupportedOperationException();
278+
put( parameterIndex, Buffer.buffer( x.getBytes() ) );
279279
}
280280

281281
@Override

hibernate-reactive-core/src/main/java/org/hibernate/reactive/adaptor/impl/ResultSetAdaptor.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import java.util.Calendar;
3131
import java.util.Map;
3232
import java.util.NoSuchElementException;
33+
import java.util.Objects;
3334
import java.util.function.Function;
3435

3536
import org.hibernate.engine.jdbc.BlobProxy;
@@ -847,12 +848,31 @@ public SQLXML getSQLXML(String columnLabel) {
847848

848849
@Override
849850
public RowId getRowId(int columnIndex) {
850-
throw new UnsupportedOperationException();
851+
Buffer buffer = row.getBuffer( columnIndex - 1 );
852+
wasNull = buffer == null;
853+
return wasNull ? null : new RowIdAdaptor( buffer );
851854
}
852855

853856
@Override
854857
public RowId getRowId(String columnLabel) {
855-
throw new UnsupportedOperationException();
858+
Buffer buffer = row.getBuffer( columnLabel );
859+
wasNull = buffer == null;
860+
return wasNull ? null : new RowIdAdaptor( buffer );
861+
}
862+
863+
private static class RowIdAdaptor implements RowId {
864+
865+
private final Buffer buffer;
866+
867+
private RowIdAdaptor(Buffer buffer) {
868+
Objects.requireNonNull( buffer );
869+
this.buffer = buffer;
870+
}
871+
872+
@Override
873+
public byte[] getBytes() {
874+
return buffer.getBytes();
875+
}
856876
}
857877

858878
@Override

hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/results/graph/entity/internal/ReactiveEntityFetchJoinedImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ protected Initializer buildEntityJoinedFetchInitializer(
2929
LockMode lockMode,
3030
NotFoundAction notFoundAction,
3131
DomainResult<?> keyResult,
32+
DomainResult<Object> rowIdResult,
3233
Fetch identifierFetch,
3334
Fetch discriminatorFetch,
3435
AssemblerCreationState creationState) {
@@ -39,6 +40,7 @@ protected Initializer buildEntityJoinedFetchInitializer(
3940
lockMode,
4041
notFoundAction,
4142
keyResult,
43+
rowIdResult,
4244
identifierFetch,
4345
discriminatorFetch,
4446
creationState

hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/results/graph/entity/internal/ReactiveEntityJoinedFetchInitializer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public ReactiveEntityJoinedFetchInitializer(
4646
LockMode lockMode,
4747
NotFoundAction notFoundAction,
4848
DomainResult<?> keyResult,
49+
DomainResult<Object> rowIdResult,
4950
Fetch identifierFetch,
5051
Fetch discriminatorFetch,
5152
AssemblerCreationState creationState) {
@@ -55,7 +56,7 @@ public ReactiveEntityJoinedFetchInitializer(
5556
lockMode,
5657
identifierFetch,
5758
discriminatorFetch,
58-
null,
59+
rowIdResult,
5960
creationState
6061
);
6162
this.referencedFetchable = referencedFetchable;

0 commit comments

Comments
 (0)