Проблема спящего режима / отражения в отношении OneToMany: IllegalArgumentException - PullRequest
0 голосов
/ 07 декабря 2018

Когда я пытаюсь сохранить объект на n-стороне, у которого установлен объект на 1-й стороне, я получаю следующую ошибку:

Dec 07, 2018 10:37:07 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: Error accessing field [public java.lang.String eu.jaas.document.Document.id] by reflection for persistent property [eu.jaas.document.Document#id] : 17842965-4ea8-41b6-9653-110965f6db13; nested exception is org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [public java.lang.String org.myorg.document.Document.id] by reflection for persistent property [org.myorg.document.Document#id] : doc123] with root cause
java.lang.IllegalArgumentException: Can not set java.lang.String field eu.jaas.document.Document.id to java.lang.String
    at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
    at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)

1-сторонний Java-объект определяется какследует:

@Entity
public class LawCase {
    ..
    @Id
    public String id;

    @OneToMany(mappedBy = "lawcase")
    public @Setter Set<Document> documents = new HashSet<>();
    ..
}

И n-сторона:

@Entity
public class Document {
    ..
    @Id
    public String id;

    @ManyToOne
    @JoinColumn(name="lawcase")
    public LawCase lawcase;
    ..
}

Идентификаторы генерируются самим приложением во время инициализации объекта, поэтому в тот момент, когда я пытаюсь сохранитьобъекты, как объекты LawCase, так и Document имеют действительный идентификатор (UUID).

Я использую springBoot.version 2.1.1.RELEASE и пробовал с Java8 и Java11.Для меня это очень похоже на обычный сценарий использования гибернации, единственная «аномалия» может заключаться в том, что у меня также есть аннотации lombok к классам данных.Я уверен, что упустил из виду одну очень простую проблему, но последние несколько дней был слепым.

1 Ответ

0 голосов
/ 07 декабря 2018

Идентификатор по умолчанию для GenerationType - АВТО.но проблема в том, что этот GenerationType не поддерживает строку.Этот GenerationType поддерживает типы данных long, int и short.

Если вы не установили аннотацию @GeneratedValue, по умолчанию назначается генератор, что означает, что значение идентификатора должно быть установлено приложением.

Если вы можете решить эту ошибку, используя пользовательский GenerationType.Вы можете сослаться здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...