Я написал следующий JDL:
enter code here
entity A {
name String required
}
entity B {
name String unique required,
}
relationship OneToMany {
B{children} to A{owner}
}
application {
config {
applicationType monolith
databaseType sql
}
entities *
dto * with mapstruct
service * with serviceClass
}
Однако сгенерированный код выдает следующее:
/src/main/java/foo/service/mapper/A.java:13: Предупреждение: несопоставленные целевые дочерние элементы: «дети, удалить детей». Сопоставление свойства «Владелец BDTO» со свойством «Владелец B». Произошло в «E toEntity (D dto)» в «EntityMapper». открытый интерфейс A расширяет EntityMapper<ADTO, A> { ^ /src/main/java/foo/service/mapper/AMapper.java:13: Предупреждение: несопоставленные целевые свойства: «дети, удалить детей». Сопоставление свойства «Владелец BDTO» со свойством «Владелец B». Произошло при 'void partialUpdate(E entity, D dto)' в 'EntityMapper'. открытый интерфейс AMapper расширяет EntityMapper<ADTO, A> { ^ /src/main/java/foo/service/mapper/BMapper.java:13: Предупреждение: несопоставленные целевые свойства: «дети, удалить детей». Произошло в «E toEntity (D dto)» в «EntityMapper». открытый интерфейс BMapper расширяет EntityMapper<BDTO, B> { ^ /src/main/java/foo/service/mapper/BMapper.java:13: Предупреждение: несопоставленные целевые свойства: «дети, удалить детей». Произошло при 'void partialUpdate(E entity, D dto)' в 'EntityMapper'. открытый интерфейс ModelMapper расширяет EntityMapper<BDTO, B> { ^ 4 Варнунген
Точно так же при попытке доступа к соответствующей конечной точке из Hibernate выдается исключение:
ОШИБКА 30510 --- [XNIO-1 задача-3] foo.service.AService: исключение в findAll() с причиной = 'org.hibernate.exception.SQLGrammarException: не удалось подготовить оператор' и исключение = 'не удалось подготовить оператор; SQL [выберите a0_.id как id1_1_, a0_.name как name2_1_, a0_.owner_id как owner_id4_1_, a0_.value как value3_1_ из a0_]; вложенным исключением является org.hibernate.exception.SQLGrammarException: не удалось подготовить оператор org.springframework.dao.InvalidDataAccessResourceUsageException: не удалось подготовить оператор; SQL [выберите a0_.id как id1_1_, a0_.name как name2_1_, a0_.owner_id как owner_id4_1_, a0_.value как value3_1_ из a0_]; вложенным исключением является org.hibernate.exception.SQLGrammarException: не удалось подготовить оператор в org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:259) в org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:233) в org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:551) в org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61) в org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:242) в org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:152) в org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) в org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:174) в org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) в org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) в org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) в org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215) в jdk.proxy3/jdk.proxy3.$Proxy200.findAll (неизвестный источник) в foo.service.AService.findAll(AService.java:88) в foo.service.AService$$FastClassBySpringCGLIB$$4afc8e16.invoke() в org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ....
Теперь мой вопрос будет заключаться в том, что я здесь делаю неправильно (или это проблема с jHipster) и как я могу это исправить?
Ваше здоровье




Покопавшись в сгенерированном коде, я понял, что Gnerated Repository Class был пуст, поэтому я приступил к созданию в нем соответствующих методов. Однако запрос JPA по-прежнему выдавал ошибку, но собственный запрос сделал свое дело. Итак, теперь мне интересно, почему jHipster не сгенерировал код, а также мне интересно, почему JPA не может правильно построить запрос. Однако я вполне уверен, что найду ответ, по крайней мере, на последний вопрос.