This is an automated email from the ASF dual-hosted git repository.

jdaugherty pushed a commit to branch feat/addHibernate7ForgeFeature
in repository https://gitbox.apache.org/repos/asf/grails-core.git


The following commit(s) were added to refs/heads/feat/addHibernate7ForgeFeature 
by this push:
     new 23b485c643 updating command switches, renaming Gorm => Grails Data, & 
renaming Hibernate => Hibernate5
23b485c643 is described below

commit 23b485c643672fcb8493680af9c4912ea2000499
Author: James Daugherty <[email protected]>
AuthorDate: Thu Jul 9 10:50:54 2026 -0400

    updating command switches, renaming Gorm => Grails Data, & renaming 
Hibernate => Hibernate5
---
 .../src/en/guide/commandLine/creatingProject.adoc  | 24 ++++----
 .../commandLine/gradleBuild/gradlePlugins.adoc     |  2 +-
 .../src/en/guide/commandLine/interactiveMode.adoc  |  6 +-
 grails-doc/src/en/ref/Command Line/create-app.adoc | 10 ++--
 .../src/en/ref/Command Line/create-plugin.adoc     |  4 +-
 .../src/en/ref/Command Line/create-restapi.adoc    |  2 +-
 .../src/en/ref/Command Line/create-web-plugin.adoc |  2 +-
 grails-doc/src/en/ref/Command Line/help.adoc       |  6 +-
 .../java/org/grails/forge/api/GormImplDTO.java     |  6 +-
 .../org/grails/forge/api/SelectOptionsDTO.java     |  2 +-
 .../java/org/grails/forge/api/ServletImplDTO.java  |  2 +-
 .../grails/forge/cli/command/CreateCommand.java    |  2 +-
 .../forge/cli/command/GormImplConverter.java       | 12 ++--
 .../forge/cli/command/CreateAppCommandSpec.groovy  | 67 +++++++++++++++++++++-
 .../java/org/grails/forge/analytics/Generated.java |  2 +-
 .../feature/database/GrailsDataHibernate5.java     |  6 +-
 .../feature/database/GrailsDataHibernate7.java     |  4 +-
 .../database/GrailsDataHibernateValidator.java     |  2 +-
 .../forge/feature/database/GrailsDataMongoDB.java  |  4 +-
 .../grails/forge/feature/database/GraphqlGorm.java |  4 +-
 .../java/org/grails/forge/feature/database/H2.java |  2 +-
 .../java/org/grails/forge/options/GormImpl.java    | 32 ++++++++++-
 .../{GormImpl.java => GormImplTypeConverter.java}  | 36 +++++-------
 .../database/GrailsDataHibernate7Spec.groovy       |  2 +-
 .../org/grails/forge/options/GormImplSpec.groovy}  | 42 +++++++-------
 25 files changed, 182 insertions(+), 101 deletions(-)

diff --git a/grails-doc/src/en/guide/commandLine/creatingProject.adoc 
b/grails-doc/src/en/guide/commandLine/creatingProject.adoc
index 7bd657235b..87b058a304 100644
--- a/grails-doc/src/en/guide/commandLine/creatingProject.adoc
+++ b/grails-doc/src/en/guide/commandLine/creatingProject.adoc
@@ -51,7 +51,7 @@ After generating a project with Forge, switch to the created 
directory and use t
 [none]
 * -jdk, --java-version
 * -s, --servlet
-* -g, --gorm
+* -d, --data (-g, --gorm are legacy aliases)
 * -t, --test
 * -f, --features
 * -i, --inplace
@@ -61,7 +61,7 @@ After generating a project with Forge, switch to the created 
directory and use t
 ./grails -t forge create-app \
     --servlet=tomcat \
     --jdk=11 \
-    --gorm=hibernate \
+    --data=hibernate5 \
     --test=spock \
     --features=github-workflow-java-ci \
     com.example.demo
@@ -73,7 +73,7 @@ After generating a project with Forge, switch to the created 
directory and use t
 [none]
 * -jdk, --java-version
 * -s, --servlet
-* -g, --gorm
+* -d, --data (-g, --gorm are legacy aliases)
 * -t, --test
 * -f, --features
 * -i, --inplace
@@ -83,7 +83,7 @@ After generating a project with Forge, switch to the created 
directory and use t
 ./grails -t forge create-restapi \
     --servlet=tomcat \
     --jdk=11 \
-    --gorm=hibernate \
+    --data=hibernate5 \
     --test=spock \
     --features=github-workflow-java-ci \
     com.example.demo
@@ -95,7 +95,7 @@ After generating a project with Forge, switch to the created 
directory and use t
 [none]
 * -jdk, --java-version
 * -s, --servlet
-* -g, --gorm
+* -d, --data (-g, --gorm are legacy aliases)
 * -t, --test
 * -f, --features
 * -i, --inplace
@@ -105,7 +105,7 @@ After generating a project with Forge, switch to the 
created directory and use t
 ./grails -t forge create-plugin \
     --servlet=tomcat \
     --jdk=11 \
-    --gorm=hibernate \
+    --data=hibernate5 \
     --test=spock \
     --features=github-workflow-java-ci \
     com.example.demo
@@ -117,7 +117,7 @@ After generating a project with Forge, switch to the 
created directory and use t
 [none]
 * -jdk, --java-version
 * -s, --servlet
-* -g, --gorm
+* -d, --data (-g, --gorm are legacy aliases)
 * -t, --test
 * -f, --features
 * -i, --inplace
@@ -127,7 +127,7 @@ After generating a project with Forge, switch to the 
created directory and use t
 ./grails -t forge create-web-plugin \
     --servlet=tomcat \
     --jdk=11 \
-    --gorm=hibernate \
+    --data=hibernate5 \
     --test=spock \
     --features=github-workflow-java-ci \
     com.example.demo
@@ -136,7 +136,7 @@ After generating a project with Forge, switch to the 
created directory and use t
 
 === The `create-` command flags
 
-The "create-*" commands are used to produce a fundamental Grails project, 
allowing for the inclusion of optional flags to select additional features, to 
customize GORM settings, an embedded servlet, the test framework, and the Java 
version.
+The "create-*" commands are used to produce a fundamental Grails project, 
allowing for the inclusion of optional flags to select additional features, to 
customize Grails Data settings, an embedded servlet, the test framework, and 
the Java version.
 
 [cols="4,8,6a"]
 |===
@@ -158,12 +158,12 @@ The "create-*" commands are used to produce a fundamental 
Grails project, allowi
 --servlet=tomcat
 ----
 
-| -g, --gorm
-| Which GORM Implementation to configure. Possible values: hibernate, 
hibernate7, mongodb.
+| -d, --data (-g, --gorm are legacy aliases)
+| Which Grails Data implementation to configure. Possible values: hibernate5, 
hibernate7, mongodb. The value hibernate is accepted as a legacy alias for 
hibernate5.
 |
 [source,shell]
 ----
---gorm hibernate
+--data hibernate5
 ----
 
 | -t, --test
diff --git a/grails-doc/src/en/guide/commandLine/gradleBuild/gradlePlugins.adoc 
b/grails-doc/src/en/guide/commandLine/gradleBuild/gradlePlugins.adoc
index 8ee5c8672f..4c55b7b081 100644
--- a/grails-doc/src/en/guide/commandLine/gradleBuild/gradlePlugins.adoc
+++ b/grails-doc/src/en/guide/commandLine/gradleBuild/gradlePlugins.adoc
@@ -20,7 +20,7 @@ under the License.
 The `create-app` command is available in both the Grails Shell CLI and the 
Forge CLI.
 
 - Use `grails create-app myapp` to generate a default project using the Grails 
Shell CLI. This is the most common usage.
-- Use `grails -t forge create-app myapp` to access advanced application 
generation options such as `--jdk`, `--gorm`, and other Forge-only flags.
+- Use `grails -t forge create-app myapp` to access advanced application 
generation options such as `--jdk`, `--data`, and other Forge-only flags.
 
 The example below assumes you are using the Forge CLI, which is solely 
intended for **application generation**. It does not support running, building, 
or managing a Grails application.
 
diff --git a/grails-doc/src/en/guide/commandLine/interactiveMode.adoc 
b/grails-doc/src/en/guide/commandLine/interactiveMode.adoc
index e111e0f25d..706fc91a96 100644
--- a/grails-doc/src/en/guide/commandLine/interactiveMode.adoc
+++ b/grails-doc/src/en/guide/commandLine/interactiveMode.adoc
@@ -75,9 +75,9 @@ Creates an application
                           grails-console, views-markup, asset-pipeline-grails, 
views-json,
                           gorm-neo4j, asciidoctor, grails-web-console,
                           logbackGroovy, mongo-sync, shade, geb, properties
-  -g, --gorm=GORM Implementation
-                        Which GORM Implementation to configure. Possible 
values: hibernate,
-                          mongodb, neo4j.
+  -d, --data, -g, --gorm=Grails Data Implementation
+                        Which Grails Data implementation to configure (-g, 
--gorm are legacy
+                          aliases). Possible values: hibernate5, hibernate7, 
mongodb.
   -h, --help            Show this help message and exit.
   -i, --inplace         Create a service using the current directory
       --jdk, --java-version=<javaVersion>
diff --git a/grails-doc/src/en/ref/Command Line/create-app.adoc 
b/grails-doc/src/en/ref/Command Line/create-app.adoc
index a12deccbf3..8fec687d53 100644
--- a/grails-doc/src/en/ref/Command Line/create-app.adoc        
+++ b/grails-doc/src/en/ref/Command Line/create-app.adoc        
@@ -29,7 +29,7 @@ In Grails {grailsMajorVersion}, `create-app` is available in 
both the **Grails S
 
 - Most users should use the **Grails Shell CLI** by default (`grails 
create-app bookstore`). This version supports core development commands and 
project lifecycle management, and includes basic `create-*` flags like 
`--inplace`, `--features`, and `--profile`.
 
-- The **Forge CLI** (`grails -t forge create-app bookstore`) is intended 
solely for **application generation** with extended configuration flags such as 
`--jdk`, `--gorm`, and `--servlet`.
+- The **Forge CLI** (`grails -t forge create-app bookstore`) is intended 
solely for **application generation** with extended configuration flags such as 
`--jdk`, `--data`, and `--servlet`.
 
 Forge-specific flags will result in an error if used with the Shell CLI.
 ====
@@ -50,7 +50,7 @@ This uses the **Forge CLI** to generate an application with 
extended configurati
 ----
 $ grails -t forge create-app bookstore \
     --jdk=17 \
-    --gorm=hibernate \
+    --data=hibernate5 \
     --servlet=tomcat \
     --test=spock \
     --features=asciidoctor,github-workflow-java-ci
@@ -62,7 +62,7 @@ These options are available only when using `grails -t forge`:
 
 - `NAME`: The desired name for the application.
 - `-f, --features=FEATURE[,FEATURE...]`: Enable features like 
`gorm-hibernate5`, `postgres`, `asciidoctor`, `grails-gsp`, etc.
-- `-g, --gorm=GORM Implementation`: Choose GORM implementation: `hibernate`, 
`mongodb`, `neo4j`.
+- `-d, --data=Grails Data Implementation` (`-g`, `--gorm` are legacy aliases): 
Choose the Grails Data implementation: `hibernate5`, `hibernate7`, `mongodb`.
 - `--jdk=<javaVersion>`: Target JDK version (e.g., 11 or 17).
 - `-s, --servlet=Servlet Implementation`: Choose embedded servlet: `tomcat`, 
`jetty`, `undertow`, `none`.
 - `-t, --test=TEST`: Select test framework: `spock`, `junit`.
@@ -83,7 +83,7 @@ Available flags:
 - `--features` _(limited support depending on profile)_
 - `--profile`
 
-Forge-only options such as `--jdk`, `--gorm`, or `--servlet` are **not 
supported** in the Shell CLI.
+Forge-only options such as `--jdk`, `--data`, or `--servlet` are **not 
supported** in the Shell CLI.
 
 === Examples
 
@@ -101,7 +101,7 @@ $ cd bookstore
 ----
 $ grails -t forge create-app bookstore \
     --jdk=17 \
-    --gorm=hibernate \
+    --data=hibernate5 \
     --features=asciidoctor,grails-gsp
 ----
 
diff --git a/grails-doc/src/en/ref/Command Line/create-plugin.adoc 
b/grails-doc/src/en/ref/Command Line/create-plugin.adoc
index ee9f88f044..d4561a6c4d 100644
--- a/grails-doc/src/en/ref/Command Line/create-plugin.adoc     
+++ b/grails-doc/src/en/ref/Command Line/create-plugin.adoc     
@@ -71,7 +71,7 @@ Options include specifying features, configuring the GORM 
implementation, select
 Here are the available options for the create-plugin command:
 
 - -f, --features=FEATURE[,FEATURE...]: Specifies the features to include in 
the plugin. Available options include h2, gorm-hibernate5, 
spring-boot-starter-jetty, micronaut-http-client, cache-ehcache, 
hibernate-validator, postgres, mysql, cache, database-migration, grails-gsp, 
hamcrest, gorm-mongodb, assertj, mockito, spring-boot-starter-undertow,  
github-workflow-java-ci, jrebel, testcontainers, sqlserver, grails-console, 
views-markup, views-json, gorm-neo4j, asciidoctor, grails-web-cons [...]
-- -g, --gorm=GORM Implementation: Specifies the GORM Implementation to 
configure for the plugin. Possible values are hibernate, mongodb, neo4j.
+- -d, --data=Grails Data Implementation (-g, --gorm are legacy aliases): 
Specifies the Grails Data implementation to configure for the plugin. Possible 
values are hibernate5, hibernate7, mongodb.
 - -h, --help: Displays the help message and exits.
 - -i, --inplace: Creates a service within the current directory.
 - --jdk=<javaVersion>: Specifies the JDK version the project should target.
@@ -106,7 +106,7 @@ This command will create a Grails plugin project named 
"minimal-plugin" with the
 +
 [source,shell]
 ----
-grails create-plugin mongodb-plugin --gorm=mongodb
+grails create-plugin mongodb-plugin --data=mongodb
 ----
 +
 This command will generate a Grails plugin project named "mongodb-plugin" 
configured to use MongoDB as the GORM implementation.
diff --git a/grails-doc/src/en/ref/Command Line/create-restapi.adoc 
b/grails-doc/src/en/ref/Command Line/create-restapi.adoc
index 69c47c943c..ceef4c809c 100644
--- a/grails-doc/src/en/ref/Command Line/create-restapi.adoc    
+++ b/grails-doc/src/en/ref/Command Line/create-restapi.adoc    
@@ -42,7 +42,7 @@ The `create-restapi` command accepts the following options:
 
 - `-f, --features=FEATURE[,FEATURE...]`: Specifies the features to include. 
Available options include h2, scaffolding, gorm-hibernate5, 
spring-boot-starter-jetty, spring-boot-starter-tomcat, micronaut-http-client, 
cache-ehcache, hibernate-validator, postgres, mysql, cache, database-migration, 
grails-gsp, hamcrest, gorm-mongodb, assertj, mockito, 
spring-boot-starter-undertow, github-workflow-java-ci, jrebel, testcontainers, 
sqlserver, grails-console, views-markup, asset-pipeline-grails, v [...]
 
-- `-g, --gorm=GORM Implementation`: Specifies the GORM Implementation to 
configure, with options like hibernate, mongodb, neo4j.
+- `-d, --data=Grails Data Implementation` (`-g`, `--gorm` are legacy aliases): 
Specifies the Grails Data implementation to configure, with options hibernate5, 
hibernate7, mongodb.
 
 - `-h, --help`: Displays the help message and exits.
 
diff --git a/grails-doc/src/en/ref/Command Line/create-web-plugin.adoc 
b/grails-doc/src/en/ref/Command Line/create-web-plugin.adoc
index 02d3a48c91..51a72ec191 100644
--- a/grails-doc/src/en/ref/Command Line/create-web-plugin.adoc 
+++ b/grails-doc/src/en/ref/Command Line/create-web-plugin.adoc 
@@ -40,7 +40,7 @@ Here are the available options for the `create-web-plugin` 
command:
 
 - `-f, --features=FEATURE[,FEATURE...]`: Specifies the features to include in 
the plugin. Available options include h2, gorm-hibernate5, 
spring-boot-starter-jetty, micronaut-http-client, cache-ehcache, 
hibernate-validator, postgres, mysql, cache, database-migration, grails-gsp, 
hamcrest, gorm-mongodb, assertj, mockito, spring-boot-starter-undertow, 
github-workflow-java-ci, jrebel, testcontainers, sqlserver, grails-console, 
views-markup, views-json, gorm-neo4j, asciidoctor, grails-web-con [...]
 
-- `-g, --gorm=GORM Implementation`: Specifies the GORM Implementation to 
configure for the plugin. Possible values are hibernate, mongodb, neo4j.
+- `-d, --data=Grails Data Implementation` (`-g`, `--gorm` are legacy aliases): 
Specifies the Grails Data implementation to configure for the plugin. Possible 
values are hibernate5, hibernate7, mongodb.
 
 - `-h, --help`: Displays the help message and exits.
 
diff --git a/grails-doc/src/en/ref/Command Line/help.adoc 
b/grails-doc/src/en/ref/Command Line/help.adoc
index d4290d21ce..de78f61431 100644
--- a/grails-doc/src/en/ref/Command Line/help.adoc      
+++ b/grails-doc/src/en/ref/Command Line/help.adoc      
@@ -148,9 +148,9 @@ Creates an application
                           grails-console, views-markup, asset-pipeline-grails, 
views-json,
                           gorm-neo4j, asciidoctor, grails-web-console,
                           logbackGroovy, mongo-sync, shade, geb, properties
-  -g, --gorm=GORM Implementation
-                        Which GORM Implementation to configure. Possible 
values: hibernate,
-                          mongodb, neo4j.
+  -d, --data, -g, --gorm=Grails Data Implementation
+                        Which Grails Data implementation to configure (-g, 
--gorm are legacy
+                          aliases). Possible values: hibernate5, hibernate7, 
mongodb.
   -h, --help            Show this help message and exit.
   -i, --inplace         Create a service using the current directory
       --jdk, --java-version=<javaVersion>
diff --git 
a/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/GormImplDTO.java
 
b/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/GormImplDTO.java
index af0e8a9a34..7cfd1c299c 100644
--- 
a/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/GormImplDTO.java
+++ 
b/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/GormImplDTO.java
@@ -85,7 +85,7 @@ public class GormImplDTO extends Linkable implements Named, 
Described, Selectabl
 
     @NonNull
     @Override
-    @Schema(description = "A description of the GORM Implementation")
+    @Schema(description = "A description of the Grails Data implementation")
     public String getDescription() {
         return description;
     }
@@ -98,13 +98,13 @@ public class GormImplDTO extends Linkable implements Named, 
Described, Selectabl
     }
 
     @Override
-    @Schema(description = "The value of the GORM Implementation for select 
options")
+    @Schema(description = "The value of the Grails Data implementation for 
select options")
     public GormImpl getValue() {
         return value;
     }
 
     @Override
-    @Schema(description = "The label of the GORM Implementation for select 
options")
+    @Schema(description = "The label of the Grails Data implementation for 
select options")
     public String getLabel() {
         return value.getLabel();
     }
diff --git 
a/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/SelectOptionsDTO.java
 
b/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/SelectOptionsDTO.java
index f25ee04940..319a9dfd01 100644
--- 
a/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/SelectOptionsDTO.java
+++ 
b/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/SelectOptionsDTO.java
@@ -90,7 +90,7 @@ public class SelectOptionsDTO {
         return reloading;
     }
 
-    @Schema(description = "supported options for GORM Implementation")
+    @Schema(description = "supported options for the Grails Data 
implementation")
     public GormImplSelectOptions getGorm() {
         return gorm;
     }
diff --git 
a/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/ServletImplDTO.java
 
b/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/ServletImplDTO.java
index f1c72e6c59..3af07892ef 100644
--- 
a/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/ServletImplDTO.java
+++ 
b/grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/ServletImplDTO.java
@@ -74,7 +74,7 @@ public class ServletImplDTO extends Linkable implements 
Named, Described, Select
 
     @NonNull
     @Override
-    @Schema(description = "A description of the GORM Implementation")
+    @Schema(description = "A description of the Servlet implementation")
     public String getDescription() {
         return description;
     }
diff --git 
a/grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CreateCommand.java
 
b/grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CreateCommand.java
index aa478ae674..a65722da2c 100644
--- 
a/grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CreateCommand.java
+++ 
b/grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CreateCommand.java
@@ -50,7 +50,7 @@ public abstract class CreateCommand extends BaseCommand 
implements Callable<Inte
     DevelopmentReloading reloading;
 
     @ReflectiveAccess
-    @CommandLine.Option(names = {"-g", "--gorm"}, paramLabel = "GORM 
Implementation", description = "Which GORM Implementation to configure. 
Possible values: ${COMPLETION-CANDIDATES}.", completionCandidates = 
GormImplCandidates.class, converter = GormImplConverter.class)
+    @CommandLine.Option(names = {"-d", "--data", "-g", "--gorm"}, paramLabel = 
"Grails Data Implementation", description = "Which Grails Data implementation 
to configure (-g, --gorm are legacy aliases). Possible values: 
${COMPLETION-CANDIDATES}.", completionCandidates = GormImplCandidates.class, 
converter = GormImplConverter.class)
     GormImpl gormImpl;
 
     @ReflectiveAccess
diff --git 
a/grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/GormImplConverter.java
 
b/grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/GormImplConverter.java
index 5b802d3b38..7dbbcd48a7 100644
--- 
a/grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/GormImplConverter.java
+++ 
b/grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/GormImplConverter.java
@@ -29,13 +29,11 @@ public class GormImplConverter implements 
CommandLine.ITypeConverter<GormImpl> {
     public GormImpl convert(String value) throws Exception {
         if (value == null) {
             return GormImpl.DEFAULT_OPTION;
-        } else {
-            for (GormImpl impl : GormImpl.values()) {
-                if (value.equalsIgnoreCase(impl.toString())) {
-                    return impl;
-                }
-            }
         }
-        throw new CommandLine.TypeConversionException("Invalid GORM 
implementation selection: " + value);
+        GormImpl impl = GormImpl.parse(value);
+        if (impl != null) {
+            return impl;
+        }
+        throw new CommandLine.TypeConversionException("Invalid Grails Data 
implementation selection: " + value);
     }
 }
diff --git 
a/grails-forge/grails-forge-cli/src/test/groovy/org/grails/forge/cli/command/CreateAppCommandSpec.groovy
 
b/grails-forge/grails-forge-cli/src/test/groovy/org/grails/forge/cli/command/CreateAppCommandSpec.groovy
index 23f7adc642..7aceef2214 100644
--- 
a/grails-forge/grails-forge-cli/src/test/groovy/org/grails/forge/cli/command/CreateAppCommandSpec.groovy
+++ 
b/grails-forge/grails-forge-cli/src/test/groovy/org/grails/forge/cli/command/CreateAppCommandSpec.groovy
@@ -64,7 +64,72 @@ class CreateAppCommandSpec extends CommandSpec implements 
CommandFixture {
 
         then:
         noExceptionThrown()
-        baos.toString().contains("Invalid GORM implementation selection: xyz")
+        baos.toString().contains("Invalid Grails Data implementation 
selection: xyz")
+    }
+
+    void "test creating a project with the data switch"() {
+        given:
+        ByteArrayOutputStream out = new ByteArrayOutputStream()
+        System.setOut(new PrintStream(out))
+
+        when:
+        PicocliRunner.run(CreateAppCommand, ctx, "dataswitch", "--data", 
"hibernate7")
+
+        then:
+        noExceptionThrown()
+        out.toString().contains("Application created")
+    }
+
+    void "test creating a project with the -d short alias"() {
+        given:
+        ByteArrayOutputStream out = new ByteArrayOutputStream()
+        System.setOut(new PrintStream(out))
+
+        when:
+        PicocliRunner.run(CreateAppCommand, ctx, "dshort", "-d", "hibernate7")
+
+        then:
+        noExceptionThrown()
+        out.toString().contains("Application created")
+    }
+
+    void "test creating a project with the legacy -g short alias"() {
+        given:
+        ByteArrayOutputStream out = new ByteArrayOutputStream()
+        System.setOut(new PrintStream(out))
+
+        when:
+        PicocliRunner.run(CreateAppCommand, ctx, "gshort", "-g", "hibernate5")
+
+        then:
+        noExceptionThrown()
+        out.toString().contains("Application created")
+    }
+
+    void "test creating a project with the legacy hibernate gorm value"() {
+        given:
+        ByteArrayOutputStream out = new ByteArrayOutputStream()
+        System.setOut(new PrintStream(out))
+
+        when:
+        PicocliRunner.run(CreateAppCommand, ctx, "legacygorm", "--gorm", 
"hibernate")
+
+        then:
+        noExceptionThrown()
+        out.toString().contains("Application created")
+    }
+
+    void "test creating a project with the hibernate5 gorm value"() {
+        given:
+        ByteArrayOutputStream out = new ByteArrayOutputStream()
+        System.setOut(new PrintStream(out))
+
+        when:
+        PicocliRunner.run(CreateAppCommand, ctx, "hib5gorm", "--gorm", 
"hibernate5")
+
+        then:
+        noExceptionThrown()
+        out.toString().contains("Application created")
     }
 
     void "community and preview features are labelled as such"() {
diff --git 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/analytics/Generated.java
 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/analytics/Generated.java
index 408933655a..e37e2431f0 100644
--- 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/analytics/Generated.java
+++ 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/analytics/Generated.java
@@ -47,7 +47,7 @@ public class Generated {
             @NonNull DevelopmentReloading reloading,
             @NonNull JdkVersion jdkVersion) {
         this.type = Objects.requireNonNull(type, "Type cannot be null");
-        this.gorm = Objects.requireNonNull(gorm, "GORM cannot be null");
+        this.gorm = Objects.requireNonNull(gorm, "Grails Data implementation 
cannot be null");
         this.servlet = Objects.requireNonNull(servlet, "Embedded Servlet 
cannot be null");
         this.reloading = Objects.requireNonNull(reloading, "Development 
reloading cannot be null");
         this.jdkVersion = Objects.requireNonNull(jdkVersion, "JDK version 
cannot be null");
diff --git 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernate5.java
 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernate5.java
index 280fb3d9b8..f592f4d4ae 100644
--- 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernate5.java
+++ 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernate5.java
@@ -55,12 +55,12 @@ public class GrailsDataHibernate5 extends GormFeature 
implements DatabaseDriverC
 
     @Override
     public String getTitle() {
-        return "GORM for Hibernate 5";
+        return "Grails Data - Hibernate 5";
     }
 
     @Override
     public String getDescription() {
-        return "Configure GORM for using Hibernate 5.";
+        return "Configure Grails Data for using Hibernate 5.";
     }
 
     @Override
@@ -124,7 +124,7 @@ public class GrailsDataHibernate5 extends GormFeature 
implements DatabaseDriverC
     @Override
     public boolean shouldApply(ApplicationType applicationType, Options 
options, Set<Feature> selectedFeatures) {
         return selectedFeatures.stream().anyMatch(f -> f instanceof 
GrailsDataHibernate5)
-                || (options.getGormImpl() == GormImpl.HIBERNATE
+                || (options.getGormImpl() == GormImpl.HIBERNATE5
                         && 
selectedFeatures.stream().noneMatch(GrailsDataHibernate7.class::isInstance));
     }
 }
diff --git 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernate7.java
 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernate7.java
index 43f7c0a4b7..073f2aee71 100644
--- 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernate7.java
+++ 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernate7.java
@@ -53,12 +53,12 @@ public class GrailsDataHibernate7 extends GormFeature 
implements DatabaseDriverC
 
     @Override
     public String getTitle() {
-        return "GORM for Hibernate 7";
+        return "Grails Data - Hibernate 7";
     }
 
     @Override
     public String getDescription() {
-        return "Configure GORM for using Hibernate 7.";
+        return "Configure Grails Data for using Hibernate 7.";
     }
 
     @Override
diff --git 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernateValidator.java
 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernateValidator.java
index 912e163c49..f69ce47e0e 100644
--- 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernateValidator.java
+++ 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernateValidator.java
@@ -34,7 +34,7 @@ public class GrailsDataHibernateValidator implements 
FeatureValidator {
     public void validatePreProcessing(Options options, ApplicationType 
applicationType, Set<Feature> features) {
         if (features.stream().anyMatch(GrailsDataHibernate5.class::isInstance)
                 && 
features.stream().anyMatch(GrailsDataHibernate7.class::isInstance)) {
-            throw new IllegalArgumentException("Only one GORM for Hibernate 
implementation can be selected: gorm-hibernate5 or gorm-hibernate7");
+            throw new IllegalArgumentException("Only one Grails Data for 
Hibernate implementation can be selected: gorm-hibernate5 or gorm-hibernate7");
         }
     }
 
diff --git 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataMongoDB.java
 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataMongoDB.java
index 94df495e9f..254863aac7 100644
--- 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataMongoDB.java
+++ 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataMongoDB.java
@@ -47,12 +47,12 @@ public class GrailsDataMongoDB extends GormOneOfFeature {
 
     @Override
     public String getTitle() {
-        return "GORM for MongoDB";
+        return "Grails Data for MongoDB";
     }
 
     @Override
     public String getDescription() {
-        return "Configure GORM for using MongoDB.";
+        return "Configure Grails Data for using MongoDB.";
     }
 
     @Override
diff --git 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GraphqlGorm.java
 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GraphqlGorm.java
index 1e06d0975f..81650a688f 100644
--- 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GraphqlGorm.java
+++ 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GraphqlGorm.java
@@ -52,12 +52,12 @@ public class GraphqlGorm implements Feature {
 
     @Override
     public String getTitle() {
-        return "GORM for GraphQL";
+        return "Grails Data for GraphQL";
     }
 
     @Override
     public String getDescription() {
-        return "Generates a GraphQL schema based on entities in GORM.";
+        return "Generates a GraphQL schema based on entities in Grails Data.";
     }
 
     @Override
diff --git 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/H2.java
 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/H2.java
index 19be11c6bd..5cf1b5ac16 100644
--- 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/H2.java
+++ 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/H2.java
@@ -100,7 +100,7 @@ public class H2 extends DatabaseDriverFeature implements 
DefaultFeature {
 
     @Override
     public boolean shouldApply(ApplicationType applicationType, Options 
options, Set<Feature> selectedFeatures) {
-        return (options.getGormImpl() == GormImpl.HIBERNATE || 
options.getGormImpl() == GormImpl.HIBERNATE7) &&
+        return (options.getGormImpl() == GormImpl.HIBERNATE5 || 
options.getGormImpl() == GormImpl.HIBERNATE7) &&
                 selectedFeatures.stream().noneMatch(f -> f instanceof 
DatabaseDriverFeature);
     }
 }
diff --git 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImpl.java
 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImpl.java
index 1c53118c8e..1f071e35d5 100644
--- 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImpl.java
+++ 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImpl.java
@@ -19,14 +19,19 @@
 package org.grails.forge.options;
 
 import io.micronaut.core.annotation.NonNull;
+import io.micronaut.core.annotation.Nullable;
 
 public enum GormImpl {
 
-    HIBERNATE("gorm-hibernate5", "Hibernate 5"),
+    HIBERNATE5("gorm-hibernate5", "Hibernate 5"),
     HIBERNATE7("gorm-hibernate7", "Hibernate 7"),
     MONGODB("gorm-mongodb", "MongoDB");
 
-    public static final GormImpl DEFAULT_OPTION = HIBERNATE;
+    public static final GormImpl DEFAULT_OPTION = HIBERNATE5;
+
+    // Selection value accepted before HIBERNATE5 replaced the HIBERNATE 
constant
+    private static final String LEGACY_HIBERNATE_VALUE = "hibernate";
+
     private final String featureName;
     private final String label;
 
@@ -45,4 +50,27 @@ public enum GormImpl {
         return label;
     }
 
+    /**
+     * Resolves a user-supplied selection value to a {@link GormImpl}.
+     *
+     * @param value the selection value (case-insensitive), e.g. {@code 
hibernate5};
+     *              the legacy value {@code hibernate} resolves to {@link 
#HIBERNATE5}
+     * @return the matching implementation, or {@code null} when the value is 
unknown
+     */
+    @Nullable
+    public static GormImpl parse(@Nullable String value) {
+        if (value == null) {
+            return null;
+        }
+        if (LEGACY_HIBERNATE_VALUE.equalsIgnoreCase(value)) {
+            return HIBERNATE5;
+        }
+        for (GormImpl impl : values()) {
+            if (value.equalsIgnoreCase(impl.name())) {
+                return impl;
+            }
+        }
+        return null;
+    }
+
 }
diff --git 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImpl.java
 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImplTypeConverter.java
similarity index 58%
copy from 
grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImpl.java
copy to 
grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImplTypeConverter.java
index 1c53118c8e..eb8624fe77 100644
--- 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImpl.java
+++ 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImplTypeConverter.java
@@ -18,31 +18,21 @@
  */
 package org.grails.forge.options;
 
-import io.micronaut.core.annotation.NonNull;
+import java.util.Optional;
 
-public enum GormImpl {
+import io.micronaut.core.convert.ConversionContext;
+import io.micronaut.core.convert.TypeConverter;
+import jakarta.inject.Singleton;
 
-    HIBERNATE("gorm-hibernate5", "Hibernate 5"),
-    HIBERNATE7("gorm-hibernate7", "Hibernate 7"),
-    MONGODB("gorm-mongodb", "MongoDB");
-
-    public static final GormImpl DEFAULT_OPTION = HIBERNATE;
-    private final String featureName;
-    private final String label;
-
-    GormImpl(String featureName, String label) {
-        this.featureName = featureName;
-        this.label = label;
-    }
-
-    @NonNull
-    public String getName() {
-        return featureName;
-    }
+/**
+ * Converts user-supplied selection values (including the legacy {@code 
hibernate}
+ * value) to {@link GormImpl} for HTTP parameter binding.
+ */
+@Singleton
+public class GormImplTypeConverter implements TypeConverter<CharSequence, 
GormImpl> {
 
-    @NonNull
-    public String getLabel() {
-        return label;
+    @Override
+    public Optional<GormImpl> convert(CharSequence object, Class<GormImpl> 
targetType, ConversionContext context) {
+        return Optional.ofNullable(GormImpl.parse(object.toString()));
     }
-
 }
diff --git 
a/grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/feature/database/GrailsDataHibernate7Spec.groovy
 
b/grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/feature/database/GrailsDataHibernate7Spec.groovy
index c795b6e039..5c22075f5a 100644
--- 
a/grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/feature/database/GrailsDataHibernate7Spec.groovy
+++ 
b/grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/feature/database/GrailsDataHibernate7Spec.groovy
@@ -167,7 +167,7 @@ class GrailsDataHibernate7Spec extends 
ApplicationContextSpec implements Command
 
         then:
         IllegalArgumentException e = thrown()
-        e.message.contains('Only one GORM for Hibernate implementation can be 
selected')
+        e.message.contains('Only one Grails Data for Hibernate implementation 
can be selected')
     }
 
     void "test config"() {
diff --git 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImpl.java
 
b/grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/options/GormImplSpec.groovy
similarity index 53%
copy from 
grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImpl.java
copy to 
grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/options/GormImplSpec.groovy
index 1c53118c8e..8334323918 100644
--- 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImpl.java
+++ 
b/grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/options/GormImplSpec.groovy
@@ -16,33 +16,33 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.grails.forge.options;
 
-import io.micronaut.core.annotation.NonNull;
+package org.grails.forge.options
 
-public enum GormImpl {
+import spock.lang.Specification
+import spock.lang.Unroll
 
-    HIBERNATE("gorm-hibernate5", "Hibernate 5"),
-    HIBERNATE7("gorm-hibernate7", "Hibernate 7"),
-    MONGODB("gorm-mongodb", "MongoDB");
+class GormImplSpec extends Specification {
 
-    public static final GormImpl DEFAULT_OPTION = HIBERNATE;
-    private final String featureName;
-    private final String label;
+    @Unroll
+    void "parse resolves #value to #expected"() {
+        expect:
+        GormImpl.parse(value) == expected
 
-    GormImpl(String featureName, String label) {
-        this.featureName = featureName;
-        this.label = label;
+        where:
+        value        | expected
+        'hibernate5' | GormImpl.HIBERNATE5
+        'HIBERNATE5' | GormImpl.HIBERNATE5
+        'hibernate'  | GormImpl.HIBERNATE5
+        'HIBERNATE'  | GormImpl.HIBERNATE5
+        'hibernate7' | GormImpl.HIBERNATE7
+        'mongodb'    | GormImpl.MONGODB
+        'neo4j'      | null
+        null         | null
     }
 
-    @NonNull
-    public String getName() {
-        return featureName;
+    void "the default option is Hibernate 5"() {
+        expect:
+        GormImpl.DEFAULT_OPTION == GormImpl.HIBERNATE5
     }
-
-    @NonNull
-    public String getLabel() {
-        return label;
-    }
-
 }


Reply via email to