Skip to content

Commit 2895ada

Browse files
committed
HBX-2880: Create and use subclasses for BasicValue and Component to accommodate for changes in identity generation
Signed-off-by: Koen Aers <[email protected]>
1 parent a8e817d commit 2895ada

File tree

8 files changed

+139
-23
lines changed

8 files changed

+139
-23
lines changed

orm/src/main/java/org/hibernate/tool/internal/export/hbm/Cfg2HbmTool.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import org.hibernate.persister.spi.PersisterClassResolver;
4444
import org.hibernate.service.ServiceRegistry;
4545
import org.hibernate.tool.internal.export.common.EntityNameFromValueVisitor;
46+
import org.hibernate.tool.internal.reveng.util.EnhancedValue;
4647
import org.hibernate.tool.internal.util.SkipBackRefPropertyIterator;
4748

4849
/**
@@ -180,11 +181,20 @@ public boolean isIdentifierGeneratorProperties(Property property) {
180181
}
181182

182183
public Properties getIdentifierGeneratorProperties(Property property) {
184+
Properties result = null;
183185
SimpleValue simpleValue = (SimpleValue)property.getValue();
184-
Properties result = new Properties();
185-
Map<String, Object> idGenParams = simpleValue.getIdentifierGeneratorParameters();
186-
if (idGenParams != null) {
187-
result.putAll(idGenParams);
186+
if (simpleValue instanceof EnhancedValue) {
187+
Properties idGenParams = ((EnhancedValue)simpleValue).getIdentifierGeneratorProperties();
188+
if (idGenParams != null) {
189+
result = new Properties();
190+
result.putAll(idGenParams);
191+
}
192+
} else {
193+
Map<String, Object> properties = simpleValue.getIdentifierGeneratorParameters();
194+
if (properties != null) {
195+
result = new Properties();
196+
result.putAll(properties);
197+
}
188198
}
189199
return result;
190200
}

orm/src/main/java/org/hibernate/tool/internal/export/java/Cfg2JavaTool.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.hibernate.mapping.SimpleValue;
2727
import org.hibernate.mapping.Value;
2828
import org.hibernate.tool.internal.export.hbm.Cfg2HbmTool;
29+
import org.hibernate.tool.internal.reveng.util.EnhancedValue;
2930
import org.hibernate.tool.internal.util.NameConverter;
3031
import org.hibernate.tool.internal.util.StringUtil;
3132
import org.hibernate.type.Type;
@@ -262,7 +263,7 @@ public String getGenericCollectionDeclaration(Collection collection, boolean pre
262263
* @return
263264
*/
264265
public Properties getFilteredIdentifierGeneratorProperties(SimpleValue simpleValue) {
265-
Properties p = simpleValue.getIdentifierGeneratorProperties();
266+
Properties p = ((EnhancedValue)simpleValue).getIdentifierGeneratorProperties();
266267
return Cfg2HbmTool.getFilteredIdentifierGeneratorProperties(p, new Properties());
267268
}
268269

orm/src/main/java/org/hibernate/tool/internal/export/java/EntityPOJOClass.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
import org.hibernate.mapping.ToOne;
3434
import org.hibernate.mapping.UniqueKey;
3535
import org.hibernate.mapping.Value;
36+
import org.hibernate.tool.internal.reveng.util.EnhancedBasicValue;
37+
import org.hibernate.tool.internal.reveng.util.EnhancedValue;
3638
import org.hibernate.tool.internal.util.AnnotationBuilder;
3739
import org.hibernate.tool.internal.util.IteratorTransformer;
3840
import org.hibernate.tool.internal.util.SkipBackRefPropertyIterator;
@@ -220,10 +222,10 @@ public String generateAnnIdGenerator() {
220222

221223
wholeString.append( AnnotationBuilder.createAnnotation( importType("jakarta.persistence.EmbeddedId") ).getResult());
222224
}
223-
else if ( identifier instanceof SimpleValue ) {
224-
SimpleValue simpleValue = (SimpleValue) identifier;
225-
strategy = simpleValue.getIdentifierGeneratorStrategy();
226-
properties = c2j.getFilteredIdentifierGeneratorProperties(simpleValue);
225+
else if ( identifier instanceof EnhancedBasicValue ) {
226+
EnhancedBasicValue enhancedBasicValue = (EnhancedBasicValue) identifier;
227+
strategy = enhancedBasicValue.getIdentifierGeneratorStrategy();
228+
properties = c2j.getFilteredIdentifierGeneratorProperties(enhancedBasicValue);
227229
StringBuffer idResult = new StringBuffer();
228230
AnnotationBuilder builder = AnnotationBuilder.createAnnotation( importType("jakarta.persistence.Id") );
229231
idResult.append(builder.getResult());
@@ -865,11 +867,15 @@ protected List<Property> getPropertiesForMinimalConstructor(PersistentClass pc)
865867

866868
protected boolean isAssignedIdentifier(PersistentClass pc, Property property) {
867869
if(property.equals(pc.getIdentifierProperty())) {
868-
if(property.getValue().isSimpleValue()) {
869-
SimpleValue sv = (SimpleValue) property.getValue();
870+
if(property.getValue() instanceof EnhancedValue) {
871+
EnhancedValue sv = (EnhancedValue) property.getValue();
870872
if("assigned".equals(sv.getIdentifierGeneratorStrategy())) {
871873
return true;
872874
}
875+
} else if (property.getValue().isSimpleValue()) {
876+
if("assigned".equals(((SimpleValue)property.getValue()).getIdentifierGeneratorStrategy())) {
877+
return true;
878+
}
873879
}
874880
}
875881
return false;

orm/src/main/java/org/hibernate/tool/internal/reveng/binder/BasicValueBinder.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package org.hibernate.tool.internal.reveng.binder;
22

3-
import org.hibernate.mapping.BasicValue;
43
import org.hibernate.mapping.Column;
5-
import org.hibernate.mapping.SimpleValue;
64
import org.hibernate.mapping.Table;
5+
import org.hibernate.tool.internal.reveng.util.EnhancedBasicValue;
76

87
class BasicValueBinder extends AbstractBinder {
98

@@ -15,11 +14,11 @@ private BasicValueBinder(BinderContext binderContext) {
1514
super(binderContext);
1615
}
1716

18-
SimpleValue bind(
17+
EnhancedBasicValue bind(
1918
Table table,
2019
Column column,
2120
boolean generatedIdentifier) {
22-
SimpleValue value = new BasicValue(getMetadataBuildingContext(), table);
21+
EnhancedBasicValue value = new EnhancedBasicValue(getMetadataBuildingContext(), table);
2322
value.addColumn(column);
2423
value.setTypeName(TypeUtils.determinePreferredType(
2524
getMetadataCollector(),

orm/src/main/java/org/hibernate/tool/internal/reveng/binder/PrimaryKeyBinder.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@
1919
import org.hibernate.mapping.PersistentClass;
2020
import org.hibernate.mapping.Property;
2121
import org.hibernate.mapping.RootClass;
22-
import org.hibernate.mapping.SimpleValue;
2322
import org.hibernate.mapping.Table;
2423
import org.hibernate.tool.api.reveng.TableIdentifier;
2524
import org.hibernate.tool.internal.reveng.RevengMetadataCollector;
2625
import org.hibernate.tool.internal.reveng.binder.ForeignKeyUtils.ForeignKeyForColumns;
26+
import org.hibernate.tool.internal.reveng.util.EnhancedBasicValue;
27+
import org.hibernate.tool.internal.reveng.util.EnhancedComponent;
28+
import org.hibernate.tool.internal.reveng.util.EnhancedValue;
2729
import org.hibernate.tool.internal.reveng.util.RevengUtils;
2830

2931
class PrimaryKeyBinder extends AbstractBinder {
@@ -56,7 +58,7 @@ PrimaryKeyInfo bind(
5658
List<Column> keyColumns = getKeyColumns(table);
5759
final TableIdentifier tableIdentifier = TableIdentifier.create(table);
5860
PrimaryKeyInfo pki = createPrimaryKeyInfo(tableIdentifier, keyColumns);
59-
SimpleValue id = createKeyValue(rc, keyColumns, pki.suggestedStrategy, table, revengMetadataCollector, processed);
61+
EnhancedValue id = createKeyValue(rc, keyColumns, pki.suggestedStrategy, table, revengMetadataCollector, processed);
6062
id.setIdentifierGeneratorProperties(pki.suggestedProperties);
6163
Property property = propertyBinder.bind(
6264
table,
@@ -70,7 +72,7 @@ PrimaryKeyInfo bind(
7072
}
7173

7274
void updatePrimaryKey(RootClass rc, PrimaryKeyInfo pki) {
73-
SimpleValue idValue = (SimpleValue) rc.getIdentifierProperty().getValue();
75+
EnhancedValue idValue = (EnhancedValue) rc.getIdentifierProperty().getValue();
7476
Properties defaultStrategyProperties = new Properties();
7577
Property constrainedOneToOne = getConstrainedOneToOne(rc);
7678
if(constrainedOneToOne!=null) {
@@ -84,7 +86,7 @@ void updatePrimaryKey(RootClass rc, PrimaryKeyInfo pki) {
8486
}
8587
}
8688

87-
private SimpleValue createKeyValue(
89+
private EnhancedValue createKeyValue(
8890
PersistentClass rc,
8991
List<Column> keyColumns,
9092
String suggestedStrategyName,
@@ -174,27 +176,27 @@ private List<Column> getKeyColumns(Table table) {
174176
return result;
175177
}
176178

177-
private SimpleValue handleColumnKey(
179+
private EnhancedBasicValue handleColumnKey(
178180
Table table,
179181
String tableIdentifierStrategyName,
180182
Set<Column> processed,
181183
List<Column> keyColumns) {
182184
Column pkc = (Column) keyColumns.get(0);
183185
BinderUtils.checkColumnForMultipleBinding(pkc);
184186
processed.add(pkc);
185-
SimpleValue result = simpleValueBinder.bind(
187+
EnhancedBasicValue result = simpleValueBinder.bind(
186188
table,
187189
pkc,
188190
isGeneratedId(keyColumns, tableIdentifierStrategyName));
189191
result.setIdentifierGeneratorStrategy(tableIdentifierStrategyName);
190192
return result;
191193
}
192194

193-
private SimpleValue handleCompositeKey(
195+
private EnhancedComponent handleCompositeKey(
194196
PersistentClass rc,
195197
Set<Column> processedColumns,
196198
List<Column> keyColumns) {
197-
Component result = new Component(getMetadataBuildingContext(), rc);
199+
EnhancedComponent result = new EnhancedComponent(getMetadataBuildingContext(), rc);
198200
result.setMetaAttributes(Collections.EMPTY_MAP);
199201
result.setEmbedded(false);
200202
result.setComponentClassName(getCompositeIdName(rc));
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package org.hibernate.tool.internal.reveng.util;
2+
3+
import java.util.Properties;
4+
5+
import org.hibernate.boot.spi.MetadataBuildingContext;
6+
import org.hibernate.mapping.BasicValue;
7+
import org.hibernate.mapping.Table;
8+
9+
@SuppressWarnings("serial")
10+
public class EnhancedBasicValue extends BasicValue implements EnhancedValue {
11+
12+
private Properties idGenProps = new Properties();
13+
private String genStrategy = null;
14+
15+
public EnhancedBasicValue(MetadataBuildingContext buildingContext, Table table) {
16+
super(buildingContext, table);
17+
}
18+
19+
@Override
20+
public void setIdentifierGeneratorProperties(Properties props) {
21+
idGenProps = props;
22+
23+
}
24+
25+
@Override
26+
public Properties getIdentifierGeneratorProperties() {
27+
return idGenProps;
28+
}
29+
30+
@Override
31+
public void setIdentifierGeneratorStrategy(String s) {
32+
genStrategy = s;
33+
}
34+
35+
@Override
36+
public String getIdentifierGeneratorStrategy() {
37+
return genStrategy;
38+
}
39+
40+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package org.hibernate.tool.internal.reveng.util;
2+
3+
import java.util.Properties;
4+
5+
import org.hibernate.MappingException;
6+
import org.hibernate.boot.spi.MetadataBuildingContext;
7+
import org.hibernate.mapping.Component;
8+
import org.hibernate.mapping.PersistentClass;
9+
10+
@SuppressWarnings("serial")
11+
public class EnhancedComponent extends Component implements EnhancedValue {
12+
13+
private Properties idGenProps = new Properties();
14+
private String genStrategy = null;
15+
16+
public EnhancedComponent(MetadataBuildingContext metadata, PersistentClass owner) throws MappingException {
17+
super(metadata, owner);
18+
}
19+
20+
@Override
21+
public void setIdentifierGeneratorProperties(Properties props) {
22+
idGenProps = props;
23+
24+
}
25+
26+
@Override
27+
public Properties getIdentifierGeneratorProperties() {
28+
return idGenProps;
29+
}
30+
31+
@Override
32+
public void setIdentifierGeneratorStrategy(String s) {
33+
genStrategy = s;
34+
}
35+
36+
@Override
37+
public String getIdentifierGeneratorStrategy() {
38+
return genStrategy;
39+
}
40+
41+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.hibernate.tool.internal.reveng.util;
2+
3+
import java.util.Properties;
4+
5+
import org.hibernate.mapping.KeyValue;
6+
7+
public interface EnhancedValue extends KeyValue {
8+
9+
void setIdentifierGeneratorProperties(Properties suggestedProperties);
10+
11+
Properties getIdentifierGeneratorProperties();
12+
13+
void setIdentifierGeneratorStrategy(String s);
14+
15+
String getIdentifierGeneratorStrategy();
16+
17+
}

0 commit comments

Comments
 (0)