Skip to content

Commit dc66f69

Browse files
committed
[hibernate#1979] Fix support for @EmbeddedId
1 parent 80e4ed9 commit dc66f69

File tree

2 files changed

+112
-0
lines changed

2 files changed

+112
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
/* Hibernate, Relational Persistence for Idiomatic Java
2+
*
3+
* SPDX-License-Identifier: Apache-2.0
4+
* Copyright: Red Hat Inc. and Hibernate Authors
5+
*/
6+
package org.hibernate.reactive.metamodel.mapping.internal;
7+
8+
import java.util.function.BiConsumer;
9+
10+
import org.hibernate.engine.FetchTiming;
11+
import org.hibernate.engine.spi.SharedSessionContractImplementor;
12+
import org.hibernate.metamodel.internal.AbstractCompositeIdentifierMapping;
13+
import org.hibernate.metamodel.mapping.EmbeddableMappingType;
14+
import org.hibernate.metamodel.mapping.JdbcMapping;
15+
import org.hibernate.metamodel.mapping.internal.EmbeddedIdentifierMappingImpl;
16+
import org.hibernate.reactive.sql.results.graph.embeddable.internal.ReactiveEmbeddableFetchImpl;
17+
import org.hibernate.spi.NavigablePath;
18+
import org.hibernate.sql.ast.spi.SqlSelection;
19+
import org.hibernate.sql.ast.tree.from.TableGroup;
20+
import org.hibernate.sql.results.graph.DomainResultCreationState;
21+
import org.hibernate.sql.results.graph.Fetch;
22+
import org.hibernate.sql.results.graph.FetchParent;
23+
24+
public class ReactiveEmbeddedIdentifierMappingImpl extends AbstractCompositeIdentifierMapping {
25+
26+
private final EmbeddedIdentifierMappingImpl delegate;
27+
28+
public ReactiveEmbeddedIdentifierMappingImpl(EmbeddedIdentifierMappingImpl delegate) {
29+
super( delegate );
30+
this.delegate = delegate;
31+
}
32+
33+
@Override
34+
public Fetch generateFetch(
35+
FetchParent fetchParent,
36+
NavigablePath fetchablePath,
37+
FetchTiming fetchTiming,
38+
boolean selected,
39+
String resultVariable,
40+
DomainResultCreationState creationState) {
41+
return new ReactiveEmbeddableFetchImpl(
42+
fetchablePath,
43+
this,
44+
fetchParent,
45+
fetchTiming,
46+
selected,
47+
creationState
48+
);
49+
}
50+
51+
@Override
52+
public EmbeddableMappingType getPartMappingType() {
53+
return delegate.getPartMappingType();
54+
}
55+
56+
@Override
57+
public void applySqlSelections(
58+
NavigablePath navigablePath,
59+
TableGroup tableGroup,
60+
DomainResultCreationState creationState) {
61+
delegate.applySqlSelections( navigablePath, tableGroup, creationState );
62+
}
63+
64+
@Override
65+
public void applySqlSelections(
66+
NavigablePath navigablePath,
67+
TableGroup tableGroup,
68+
DomainResultCreationState creationState,
69+
BiConsumer<SqlSelection, JdbcMapping> selectionConsumer) {
70+
delegate.applySqlSelections( navigablePath, tableGroup, creationState, selectionConsumer );
71+
}
72+
73+
@Override
74+
public EmbeddableMappingType getMappedIdEmbeddableTypeDescriptor() {
75+
return delegate.getMappedIdEmbeddableTypeDescriptor();
76+
}
77+
78+
@Override
79+
public Nature getNature() {
80+
return delegate.getNature();
81+
}
82+
83+
@Override
84+
public String getAttributeName() {
85+
return delegate.getAttributeName();
86+
}
87+
88+
@Override
89+
public Object getIdentifier(Object entity) {
90+
return delegate.getIdentifier( entity );
91+
}
92+
93+
@Override
94+
public void setIdentifier(Object entity, Object id, SharedSessionContractImplementor session) {
95+
delegate.setIdentifier( entity, id, session );
96+
}
97+
98+
@Override
99+
public String getSqlAliasStem() {
100+
return "";
101+
}
102+
103+
@Override
104+
public String getFetchableName() {
105+
return delegate.getFetchableName();
106+
}
107+
}

hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveAbstractPersisterDelegate.java

+5
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.hibernate.metamodel.mapping.EntityValuedModelPart;
3636
import org.hibernate.metamodel.mapping.ManagedMappingType;
3737
import org.hibernate.metamodel.mapping.SingularAttributeMapping;
38+
import org.hibernate.metamodel.mapping.internal.EmbeddedIdentifierMappingImpl;
3839
import org.hibernate.metamodel.mapping.internal.GeneratedValuesProcessor;
3940
import org.hibernate.metamodel.mapping.internal.MappingModelCreationHelper;
4041
import org.hibernate.metamodel.mapping.internal.MappingModelCreationProcess;
@@ -56,6 +57,7 @@
5657
import org.hibernate.reactive.loader.ast.spi.ReactiveSingleUniqueKeyEntityLoader;
5758
import org.hibernate.reactive.logging.impl.Log;
5859
import org.hibernate.reactive.logging.impl.LoggerFactory;
60+
import org.hibernate.reactive.metamodel.mapping.internal.ReactiveEmbeddedIdentifierMappingImpl;
5961
import org.hibernate.reactive.metamodel.mapping.internal.ReactivePluralAttributeMapping;
6062
import org.hibernate.reactive.metamodel.mapping.internal.ReactiveToOneAttributeMapping;
6163
import org.hibernate.reactive.sql.results.graph.embeddable.internal.ReactiveNonAggregatedIdentifierMappingFetch;
@@ -324,6 +326,9 @@ public EntityIdentifierMapping convertEntityIdentifierMapping(EntityIdentifierMa
324326
if ( entityIdentifierMapping instanceof NonAggregatedIdentifierMappingImpl ) {
325327
return new ReactiveNonAggregatedIdentifierMappingImpl( (NonAggregatedIdentifierMappingImpl) entityIdentifierMapping );
326328
}
329+
if ( entityIdentifierMapping instanceof EmbeddedIdentifierMappingImpl ) {
330+
return new ReactiveEmbeddedIdentifierMappingImpl( (EmbeddedIdentifierMappingImpl) entityIdentifierMapping );
331+
}
327332
return entityIdentifierMapping;
328333
}
329334

0 commit comments

Comments
 (0)