Overview of the issue
For my Angular / H2 monolith, jHipster generates the wrong create / update class for my Shipment entity which has a one-to-one relationship with ShoppingOrder. It wants to load a non-existent shopping order instead of loading all orders when creating a new shipment.
Here is the stacktrace:
2019-06-25 23:47:56.129 DEBUG 84738 --- [ XNIO-1 task-54] c.b.t.j.aop.logging.LoggingAspect : Exit: com.betterprojectsfaster.tutorial.jhipsterdocker.web.rest.ShoppingOrderResource.getAllShoppingOrders() with result = [ShoppingOrderDTO{id=1, name='Ergonomic transmitter', totalAmount=36778.0, ordered='2019-06-25T11:08:05+02:00[Europe/Berlin]', buyer=2, buyer='anonymoususer'}, ShoppingOrderDTO{id=2, name='withdrawal Solomon Islands Licensed', totalAmount=83530.0, ordered='2019-06-25T18:48:17+02:00[Europe/Berlin]', buyer=1, buyer='system'}, ShoppingOrderDTO{id=3, name='magenta Refined Rubber Gloves', totalAmount=67756.0, ordered='2019-06-25T17:08:10+02:00[Europe/Berlin]', buyer=1, buyer='system'}, ShoppingOrderDTO{id=4, name='Buckinghamshire Future-proofed deposit', totalAmount=17436.0, ordered='2019-06-24T23:50:58+02:00[Europe/Berlin]', buyer=2, buyer='anonymoususer'}, ShoppingOrderDTO{id=5, name='synthesize Creative', totalAmount=13752.0, ordered='2019-06-25T06:12:20+02:00[Europe/Berlin]', buyer=1, buyer='system'}, ShoppingOrderDTO{id=6, name='Concrete Global SMS', totalAmount=25794.0, ordered='2019-06-25T16:56:12+02:00[Europe/Berlin]', buyer=2, buyer='anonymoususer'}, ShoppingOrderDTO{id=7, name='parsing', totalAmount=55520.0, ordered='2019-06-25T10:01:22+02:00[Europe/Berlin]', buyer=2, buyer='anonymoususer'}, ShoppingOrderDTO{id=8, name='Vision-oriented', totalAmount=9310.0, ordered='2019-06-24T23:15:07+02:00[Europe/Berlin]', buyer=2, buyer='anonymoususer'}, ShoppingOrderDTO{id=9, name='Human deposit', totalAmount=33902.0, ordered='2019-06-25T15:43:45+02:00[Europe/Berlin]', buyer=1, buyer='system'}, ShoppingOrderDTO{id=10, name='bus Internal AI', totalAmount=77987.0, ordered='2019-06-25T01:06:56+02:00[Europe/Berlin]', buyer=2, buyer='anonymoususer'}]
2019-06-25 23:47:56.158 WARN 84738 --- [ XNIO-1 task-56] o.z.problem.spring.common.AdviceTraits : Bad Request: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; nested exception is java.lang.NumberFormatException: For input string: "undefined"
2019-06-25 23:47:56.159 WARN 84738 --- [ XNIO-1 task-56] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; nested exception is java.lang.NumberFormatException: For input string: "undefined"]
I added log statements in the same Angular class (lines 57 and 60), so you can see in the browser dev tools console how the else branch is reached:
ShipmentUpdateComponent.ngOnInit.shoppingOrderService.query: orderId: undefined
Motivation for or Use Case
I have a valid JDL file that jHipster imports without reporting an error. However, the generated front-end code doesn't work for one entity.
Reproduce the error
- Create a new jHipster project with Java 11 by importing my JDL file.
- Run
./gradlew to start the application.
- The application will probably fail to load the fake data for the shipment table.
- Log into the application.
- Go to the Entities - Shipment menu.
- Click the Create a new Shipment button.
- Witness the Bad request. error message appearing and the empty Order drop-own.
Related issues
#9990: For that very same entity, JHipster generates the wrong fake data.
Suggest a Fix
In line 56 of shipment-update.component.ts, take away one of the two ! in front of this.editForm.get('orderId').value.
JHipster Version(s)
JHipster 6.1.2, Java 11
JHipster configuration
my-simple-shop@0.0.0 /Users/karsten/workspaces/me/services/better-projects-faster/bug-reports/jhipster-6.1.2-java-11-test
└── generator-jhipster@6.1.2
JHipster configuration, a .yo-rc.json file generated in the root folder
.yo-rc.json file
{
"generator-jhipster": {
"databaseType": "sql",
"devDatabaseType": "h2Disk",
"enableHibernateCache": true,
"enableSwaggerCodegen": false,
"enableTranslation": true,
"jhiPrefix": "bpf",
"languages": ["en", "de"],
"messageBroker": false,
"nativeLanguage": "en",
"packageName": "com.betterprojectsfaster.tutorial.jhipsterdocker",
"packageFolder": "com/betterprojectsfaster/tutorial/jhipsterdocker",
"prodDatabaseType": "postgresql",
"searchEngine": false,
"serviceDiscoveryType": false,
"skipClient": false,
"skipServer": false,
"testFrameworks": ["protractor"],
"websocket": "spring-websocket",
"baseName": "my_simple_shop",
"applicationType": "monolith",
"authenticationType": "jwt",
"buildTool": "gradle",
"cacheProvider": "ehcache",
"clientFramework": "angularX",
"useSass": true,
"clientPackageManager": "npm",
"jhipsterVersion": "6.1.2",
"skipUserManagement": false,
"serverPort": "8080",
"jwtSecretKey": "bXktc2VjcmV0LXRva2VuLXRvLWNoYW5nZS1pbi1wcm9kdWN0aW9uLWFuZC10by1rZWVwLWluLWEtc2VjdXJlLXBsYWNl",
"clientTheme": "none",
"entitySuffix": "",
"dtoSuffix": "DTO",
"otherModules": []
},
"entities": ["Product", "Address", "ShoppingOrder", "ProductOrder", "Shipment"]
}
JDL for the Entity configuration(s) entityName.json files generated in the .jhipster directory
JDL entity definitions
entity Product {
name String required unique minlength(2) maxlength(90),
price Float required min(0),
description TextBlob required,
picture ImageBlob required,
specification AnyBlob,
category ProductCategory,
inventory Integer required min(0)
}
entity Address {
addressLine1 String required minlength(2) maxlength(80),
addressLine2 String minlength(2) maxlength(80),
city String minlength(2) maxlength(80),
postalCode String minlength(5) maxlength(5)
}
entity ShoppingOrder {
name String required unique minlength(2) maxlength(90),
totalAmount Float min(0),
ordered ZonedDateTime
}
entity ProductOrder {
amount Integer required min(0) max(5)
}
entity Shipment {
shippedAt ZonedDateTime required
}
enum ProductCategory {
Laptop,
Desktop,
Phone,
Tablet,
Accessory
}
relationship OneToOne {
Shipment{order(name) required} to ShoppingOrder{shipment required}
}
relationship OneToMany {
Product{order required} to ProductOrder{product(name) required},
ShoppingOrder{orders required} to ProductOrder{overallOrder(name)}
}
relationship ManyToOne {
Address{user(login) required} to User,
ShoppingOrder{buyer(login) required} to User,
ProductOrder{buyer(login) required} to User,
Shipment{shippedBy(login) required} to User
}
dto Product, Address, ShoppingOrder, ProductOrder, Shipment with mapstruct
service Product, Address, ShoppingOrder, ProductOrder, Shipment with serviceClass
Environment and Tools
openjdk version "11.0.3" 2019-04-16
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.3+7)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.3+7, mixed mode)
git version 2.22.0
node: v10.15.3
npm: 6.9.0
yeoman: 2.0.6
Docker version 18.09.2, build 6247962
docker-compose version 1.23.2, build 1110ad01
Entity configuration(s) entityName.json files generated in the .jhipster directory
Shipment.json
{
"name": "Shipment",
"fields": [
{
"fieldName": "shippedAt",
"fieldType": "ZonedDateTime",
"fieldValidateRules": [
"required"
]
}
],
"relationships": [
{
"relationshipType": "one-to-one",
"otherEntityName": "shoppingOrder",
"otherEntityRelationshipName": "shipment",
"relationshipValidateRules": "required",
"relationshipName": "order",
"otherEntityField": "name",
"ownerSide": true
},
{
"relationshipType": "many-to-one",
"otherEntityName": "user",
"otherEntityRelationshipName": "shipment",
"relationshipValidateRules": "required",
"relationshipName": "shippedBy",
"otherEntityField": "login"
}
],
"changelogDate": "20190625202518",
"entityTableName": "shipment",
"dto": "mapstruct",
"pagination": "no",
"service": "serviceClass",
"jpaMetamodelFiltering": false,
"fluentMethods": true,
"clientRootFolder": "",
"applications": [
"my_simple_shop"
]
}
Browsers and Operating System
macOS Mojave 10.14.4, Safari
Overview of the issue
For my Angular / H2 monolith, jHipster generates the wrong create / update class for my
Shipmententity which has a one-to-one relationship withShoppingOrder. It wants to load a non-existent shopping order instead of loading all orders when creating a new shipment.shipment-update.component.tswhich loads the shopping order, starting in line 48.this.editForm.get('orderId').valueisundefined, but because of the two!in line 56, theelsebranch kicks in and tries to load the non-existing shopping order then.Here is the stacktrace:
I added log statements in the same Angular class (lines 57 and 60), so you can see in the browser dev tools console how the
elsebranch is reached:Motivation for or Use Case
I have a valid JDL file that jHipster imports without reporting an error. However, the generated front-end code doesn't work for one entity.
Reproduce the error
./gradlewto start the application.Related issues
#9990: For that very same entity, JHipster generates the wrong fake data.
Suggest a Fix
In line 56 of
shipment-update.component.ts, take away one of the two!in front ofthis.editForm.get('orderId').value.JHipster Version(s)
JHipster 6.1.2, Java 11
JHipster configuration
JHipster configuration, a
.yo-rc.jsonfile generated in the root folder.yo-rc.json file
{ "generator-jhipster": { "databaseType": "sql", "devDatabaseType": "h2Disk", "enableHibernateCache": true, "enableSwaggerCodegen": false, "enableTranslation": true, "jhiPrefix": "bpf", "languages": ["en", "de"], "messageBroker": false, "nativeLanguage": "en", "packageName": "com.betterprojectsfaster.tutorial.jhipsterdocker", "packageFolder": "com/betterprojectsfaster/tutorial/jhipsterdocker", "prodDatabaseType": "postgresql", "searchEngine": false, "serviceDiscoveryType": false, "skipClient": false, "skipServer": false, "testFrameworks": ["protractor"], "websocket": "spring-websocket", "baseName": "my_simple_shop", "applicationType": "monolith", "authenticationType": "jwt", "buildTool": "gradle", "cacheProvider": "ehcache", "clientFramework": "angularX", "useSass": true, "clientPackageManager": "npm", "jhipsterVersion": "6.1.2", "skipUserManagement": false, "serverPort": "8080", "jwtSecretKey": "bXktc2VjcmV0LXRva2VuLXRvLWNoYW5nZS1pbi1wcm9kdWN0aW9uLWFuZC10by1rZWVwLWluLWEtc2VjdXJlLXBsYWNl", "clientTheme": "none", "entitySuffix": "", "dtoSuffix": "DTO", "otherModules": [] }, "entities": ["Product", "Address", "ShoppingOrder", "ProductOrder", "Shipment"] }JDL for the Entity configuration(s)
entityName.jsonfiles generated in the.jhipsterdirectoryJDL entity definitions
entity Product { name String required unique minlength(2) maxlength(90), price Float required min(0), description TextBlob required, picture ImageBlob required, specification AnyBlob, category ProductCategory, inventory Integer required min(0) } entity Address { addressLine1 String required minlength(2) maxlength(80), addressLine2 String minlength(2) maxlength(80), city String minlength(2) maxlength(80), postalCode String minlength(5) maxlength(5) } entity ShoppingOrder { name String required unique minlength(2) maxlength(90), totalAmount Float min(0), ordered ZonedDateTime } entity ProductOrder { amount Integer required min(0) max(5) } entity Shipment { shippedAt ZonedDateTime required } enum ProductCategory { Laptop, Desktop, Phone, Tablet, Accessory } relationship OneToOne { Shipment{order(name) required} to ShoppingOrder{shipment required} } relationship OneToMany { Product{order required} to ProductOrder{product(name) required}, ShoppingOrder{orders required} to ProductOrder{overallOrder(name)} } relationship ManyToOne { Address{user(login) required} to User, ShoppingOrder{buyer(login) required} to User, ProductOrder{buyer(login) required} to User, Shipment{shippedBy(login) required} to User } dto Product, Address, ShoppingOrder, ProductOrder, Shipment with mapstruct service Product, Address, ShoppingOrder, ProductOrder, Shipment with serviceClassEnvironment and Tools
openjdk version "11.0.3" 2019-04-16
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.3+7)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.3+7, mixed mode)
git version 2.22.0
node: v10.15.3
npm: 6.9.0
yeoman: 2.0.6
Docker version 18.09.2, build 6247962
docker-compose version 1.23.2, build 1110ad01
Entity configuration(s)
entityName.jsonfiles generated in the.jhipsterdirectoryShipment.jsonBrowsers and Operating System
macOS Mojave 10.14.4, Safari