Обеспечивает ли upcasting сохранение поля ребенка в java? - PullRequest
1 голос
/ 02 апреля 2020

Я собираюсь использовать Hibernate для сохранения некоторых сущностей.

EntityClass entity = new EntityClass();
Object obj = (Object) entity;
hibernateSession.persist(obj)

Могу ли я гарантировать, что значение поля в исходном EntityClass будет сохранено?

Есть ли сборщик мусора непонятные значения полей?

Могу ли я гарантировать, что при обновлении сохраняется значение исходного поля?

(другие распространенные случаи, в которых не используется спящий режим)

Это мой оригинальный код

Class<?> clazz = Class.forName(~~~); // from external file
Iterator<?> iterator = ((Iterator<?>) clazz.getConstructor(String.class).newInstance(~~~); // from external file

while (iterator.hasNext()) {
    for (JsonEntity content : (List<JsonEntity>) iterator.next()) {
        session.saveOrUpdate(content.toEntity());
    }
    session.flush();
}
transaction.commit();

Ответы [ 2 ]

1 голос
/ 02 апреля 2020
  • вам не нужно приводить и передавать объект сущности.
EntityClass entity = new EntityClass();
hibernateSession.persist(entity);

  • до тех пор, пока ваш класс сущности ссылается, не будет ли это сборкой мусора

  • приведение вашего объекта к суперкласс не удалит исходные поля / методы, но вы можете получить доступ только к тем полям / методам, которые доступны только в суперклассе

0 голосов
/ 02 апреля 2020

Обновление ссылочного типа (например, Entity) не изменяет объект или его поля. Вы можете прочитать больше здесь: https://www.baeldung.com/java-type-casting

Также вам не требуется явно приводить его, поскольку компилятор неявно распознает, что Entity является подклассом Object. Вы можете просто сделать:

Object obj = entity;

...